django url NoReverseMatch works in 3rd party app but not my project

给你一囗甜甜゛ 提交于 2019-12-24 19:07:03

问题


I am integrating django-zinnia 0.12.3 into my django 1.4 project. I have it installed and working. I want to override its zinnia/base.html template so that all the content appears using my site's template. The zinnia templates extend 'zinnia/base.html'.

When I copy the file zinnia/templates/zinnia/base.html to myproject/templates/zinnia/base.html all the zinnia {% url %} stopped working and gave NoReverseMatch. Even if I made zero changes to the file. For example:

{% 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

I was solved the problem by removing the quotes around the url names, for example:

{% url zinnia_entry_archive_index %}

However, if I remove the copy of base.html that I put in myproject/templates/zinnia (in other words it uses the original one in the zinnia project), the urls work again.

My question is why does it work with the quotes inside the original zinnia folder, but not from within my project folder?


回答1:


The reason is that in Django <= 3 the url tag takes url name without quotes. But in Django 1.4+ it is deprecated and url name without quotes is gone in Django 1.5:

So if you are using Django <= 1.4 do not remove the quotes (unless you are passing context variable) around url names. Instead do this for compatibility reason if you ever wanted to upgrade your django version:

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

Documentation

Don’t forget to put quotes around the function path or pattern name!

Changed in Django 1.5: The first parameter used not to be quoted, which was inconsistent > with other template tags. Since Django 1.5, it is evaluated according to the usual rules: > it can be a quoted string or a variable that will be looked up in the context.



来源:https://stackoverflow.com/questions/16433035/django-url-noreversematch-works-in-3rd-party-app-but-not-my-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!