有没有其他方法在Django中编写get_absolute_url方法? 我在名为 category_list.html 的模板中编写了它,存储在名为tags的目录中,如下:
{% for c in active_categories %}
<a href="{{ c.get_absolute_url }}">{{ c.name }}</a>
<br />
{% endfor %}
此外,在名为“ catalog.html ”的另一个模板中,我包含以下行: {%include“tags / category_list.html”%}
这是models.py中的get_absolute_url的实现:
@models.permalink
def get_absolute_url(self):
return ('catalog_product', (), { 'product_slug': self.slug })
此外,这是我在urls.py文件中包含的内容:
urlpatterns = patterns('catalog.views',
url(r'^$', 'index', {'template_name':'catalog/index.html'}, 'catalog_home'),
url(r'^category/(?P<category_slug>[-\w]+)/$', 'show_category', {'template_name':'catalog/category.html'},
'catalog_category'),
url(r'^product/(?P<product_slug>[-\w]+)/$', 'show_product', {'template_name':'catalog/product.html'},
'catalog_product'),
)
然而,它给出了这个错误: / catalog / 的NoReverseMatch。 还有另一种方法吗?或者我写的代码是错误的,对于django 1.6.5?
答案 0 :(得分:1)
您尝试将url的名称作为参数传递,当它们应该是关键字参数时,指定name
。所以,一个例子如下:
url(r'^$', 'index', {'template_name': 'catalog/index.html'}, name='catalog_home'),
所以,现在当你从一个观点来电话时:
reverse('catalog_home')
或您的模板{% url 'catalog_home' %}
Django将在您的urls.py
中搜索名称为'catalog_home'
的网址,并正确找到它。
Alasdair是正确的,它很可能是模板中早先发现的引发此错误的网址,而不是您认为错误发生的位置。
此外,有些不相关,但您将通过Django文档找到的标准是使用短划线(-
)命名您的网址,而不是下划线。因此'catalog_home'
将为'catalog-home'
答案 1 :(得分:0)
谢谢大家的帮助。
将网址编写为url(r'^$', 'index', {'template_name': 'catalog/index.html'}, name='catalog_home'),
并从@permalink
方法定义中删除get_absolute_url()
会有所帮助。
此代码是使用旧版Django的教程编写的,并且不再使用@permalink,也不再需要@permalink!
相反,如果仍然希望使用:
get_absolute_url = models.permalink(get_absolute_url)
使用get_absolute_function()定义(版本1.4以后)。