0

我正在将 django-zinnia 0.12.3 集成到我的 django 1.4 项目中。我已经安装并工作了。我想覆盖它的 zinnia/base.html 模板,以便所有内容都使用我网站的模板显示。zinnia 模板扩展了“zinnia/base.html”。

当我将文件 zinnia/templates/zinnia/base.html 复制到 myproject/templates/zinnia/base.html 时,所有的 zinnia {% url %} 都停止工作并给出了 NoReverseMatch。即使我对文件进行了零更改。例如:

{% url 'zinnia_entry_archive_index' %}  --> returns:
    NoReverseMatch Reverse for ''zinnia_entry_archive_index'' ... not found
{% url 'admin:app_list' 'zinnia' %}" title="{% trans "Dashboard" %} --> returns:
    NoReverseMatch u"'admin" is not a registered namespace

我通过删除 url 名称周围的引号解决了这个问题,例如:

{% url zinnia_entry_archive_index %}

但是,如果我删除了我放在 myproject/templates/zinnia 中的 base.html 的副本(换句话说,它使用了 zinnia 项目中的原始副本),那么这些 url 将再次起作用。

我的问题是为什么它可以使用原始百日草文件夹中的引号,而不是我的项目文件夹中的引号?

4

1 回答 1

1

原因是Django <= 3url 标签中的 url 名称不带引号。但是Django 1.4+它已被弃用,并且不带引号的 url 名称消失了Django 1.5

因此,如果您正在使用Django <= 1.4,请不要删除 url 名称周围的引号(除非您传递上下文变量)。如果您想升级您的 django 版本,请出于兼容性原因这样做:

{% load url from future %}
{% url 'zinnia_entry_archive_index' %}

文档

不要忘记在函数路径或模式名称周围加上引号!

在 Django 1.5 中更改:第一个参数以前没有被引用,这与其他模板标签不一致 >。从 Django 1.5 开始,它根据通常的规则进行评估: > 它可以是带引号的字符串或将在上下文中查找的变量。

于 2013-05-08T07:39:40.427 回答