为什么在模板中使用cache_page
标记时,在Django 1.4下的urls.py
中使用url
函数会导致NoReverseMatch错误?
from django.shortcuts import render
def index(request):
'''Display the home page'''
return render(request, 'index.html')
关注cache_page
directions:
from django.conf.urls import patterns, include, url
from django.views.decorators.cache import cache_page
from my_project.my_app import views
urlpatterns = patterns('',
url(r'^$', cache_page(60 * 60)(views.index)),
)
{% url my_project.my_app.views.index %}
NoReverseMatch at /
Reverse for 'my_project.my_app.views.index' with arguments '()' and keyword arguments '{}' not found.
错误消息指出的违规行当然是:
{% url my_project.my_app.views.index %}
cache_page
中使用views.py
成功装饰(根据文档不推荐)答案 0 :(得分:2)
当做反向时,Django试图通过
进行匹配URL
标签在你的代码中,'my_project.my_app.views.index'
是虚线路径,然后Django会得到实际的函数index()
,并通过查找映射字典{{1}将其用作匹配反转URL的键。 }}。
但是,当您将django.core.urlresolvers.get_resolver(None).reverse_dict
换行view.index
时,映射字典中的键将成为包装器。因此查找失败并引发cache_view
。这很不方便且容易出错,但我不确定它是否是一个错误。
然后您可以使用NoReverseMatch
标签
URL
或在url(r'^$', cache_page(60 * 60)(views.index), name='my_index'),
{# in template #}
{% url my_index %}
中使用cache_page
作为您提到的装饰器。