【问题标题】:Getting @permalink decorator to work with django generic views?让@permalink 装饰器与 django 通用视图一起工作?
【发布时间】:2010-10-10 00:09:14
【问题描述】:

也许我遗漏了一些东西,但根据 django 文档 (1.2),我已经完全按照指定设置了我的 URLS 模型,以确保我没有硬编码为 get_absolute_url 返回的 url。

这是我所拥有的:

在 urls.py 中

urlpatterns = patterns('django.views.generic.list_detail',
    url(r'^$','object_list',
            { 'queryset': product.objects.all(),
            'template_name': 'products/list.html',
            },
            name='product_list'),  
    url(r'^(?P<slug>[-\w]+)/$','object_detail',
            { 'queryset': product.objects.all(),
            'template_name': 'products/detail.html',
            },
            name='product_detail'), 
)

在models.py中

@models.permalink
def get_absolute_url(self):
    return ('product_detail', (), {'slug': str(self.slug)})

该方法在模板中返回一个空字符串,并且从 shell 中返回一个错误。

NoReverseMatch: Reverse for 'product_detail' with arguments '()' and keyword arguments '{'slug': 'dd-d--'}' not found.

这应该可以解决,因为 urls.py 有一个名称:product_detail?

【问题讨论】:

    标签: django django-models django-urls


    【解决方案1】:

    语法似乎是正确的,你确定你的 urls.py 被包含了吗?尝试在视图代码中单步调试并使用 reverse 函数生成 url。

    我的盲目猜测是,您的 urls.py 文件通常有问题。

    【讨论】:

    • 是的,昨晚想通了。没有在根 url 中正确包含它。
    【解决方案2】:

    尝试更改此行:

    url(r'(?P<slug>[-\w]+)/^$','object_detail',
    

    url(r'^(?P<slug>[-\w]+)/$','object_detail',
    

    Carret (^) 代表行的开头,因此在您编写它的上下文中是不合逻辑的,因为这意味着该行甚至在开始之前就有内容。

    【讨论】:

    • 很好地接受了,做出了改变。但是它似乎仍然无法反转 url。
    • 我已经测试了该模式,据我所知它工作正常,除此之外我找不到其他任何东西。
    猜你喜欢
    • 2011-11-22
    • 2019-03-09
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多