Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django NoReverseMatch异常,URL.py中有缓存页面 问题:_Python_Django - Fatal编程技术网

Python Django NoReverseMatch异常,URL.py中有缓存页面 问题:

Python Django NoReverseMatch异常,URL.py中有缓存页面 问题:,python,django,Python,Django,在模板中使用url标记时,为什么在Django 1.4下的url.py中使用cache\u页面函数会导致NoReverseMatch错误 安装程序 views.py url.py 在缓存\u页面之后: index.html 错误消息 错误消息指出的错误行当然是: {% url my_project.my_app.views.index %} 到目前为止我都试过了 大量的谷歌搜索和搜索等等 将代码简化为上面的示例,以排除其他冲突 在views.py中成功地将cache\u页面用作装饰器(根据文

在模板中使用
url
标记时,为什么在Django 1.4下的
url.py
中使用
cache\u页面
函数会导致NoReverseMatch错误

安装程序 views.py url.py 在
缓存\u页面之后

index.html 错误消息 错误消息指出的错误行当然是:

{% url my_project.my_app.views.index %}
到目前为止我都试过了
  • 大量的谷歌搜索和搜索等等
  • 将代码简化为上面的示例,以排除其他冲突
  • views.py
    中成功地将
    cache\u页面
    用作装饰器(根据文档,不推荐使用)
  • 献给我们强大的Django霸主

在执行反向操作时,Django尝试通过

  • URL
    标签
  • 虚线路径
  • 可调用
在您的代码中,
'my_project.my_app.views.index'
是虚线路径,然后Django将通过查找映射字典
Django.core.urlresolvers.get_resolver(None).reverse_dict>获得实际函数
index()
,并将其用作匹配反向URL的键

但是,当您通过
cache\u视图
包装
视图.index
时,映射词汇表中的键将成为包装器。因此,查找失败并引发
NoReverseMatch
。这既不方便又容易出错,但我不确定这是否是一个bug

然后,您可以使用
URL
label解决这个问题

url(r'^$', cache_page(60 * 60)(views.index), name='my_index'),
{# in template #}
{% url my_index %}

或者在
views.py中使用
cache\u页面
作为您提到的装饰者。

非常感谢!正如您所建议的,我能够通过将
name='my_index
添加到url.py中的我的行和
{%url my_index%}
添加到模板中来解决问题。此外,正如您所指出的,我也不确定这是否是一个bug,但文档中至少有一个缺点,就是建议使用
url.py
cache\u页面,而不提更改模板url标记。
{% 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 %}
url(r'^$', cache_page(60 * 60)(views.index), name='my_index'),
{# in template #}
{% url my_index %}