也许我错过了一些东西,但是根据django docs(1.2),我已经完全按照指定设置了我的URLS模型,以确保我不会为get_absolute_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 ?
答案 0 :(得分:2)
语法似乎是正确的,你确定你的urls.py包含在内吗?尝试在视图代码中单步调试并首先使用 reverse 函数生成URL。
我的盲目猜测是,你的urls.py文件通常有问题。
答案 1 :(得分:1)
尝试更改此行:
url(r'(?P<slug>[-\w]+)/^$','object_detail',
到
url(r'^(?P<slug>[-\w]+)/$','object_detail',
Carret(^
)代表该行的开头,因此在您编写它的上下文中它是不合逻辑的,因为这意味着该行甚至在它开始之前都有内容。