使用没有命名空间的Apphook时的NoReverseMatch

Joh*_*Doe 6 django-cms

我使用Django CMS 3和Django 1.6以及默认的django民意调查应用程序,我正在做这个简短的教程.

我的问题是PollsApp在使用这样的命名空间时工作正常:

djangocms_polls/cms_app.py:

...
class PollsApp(CMSApp):
    name = _("Poll App")
    urls = ["polls.urls"]
    app_name = "polls"
...
Run Code Online (Sandbox Code Playgroud)

民调/模板/调查/ index.html的:

...
{% for poll in latest_poll_list %}
    <li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li>
{% endfor %}
...
Run Code Online (Sandbox Code Playgroud)

但是当我从index.html中删除"polls:"部分时,它将无法工作(并且如果PollsApp中存在或不存在app_name字段并不重要)并且我收到此错误:

NoReverseMatch at/polls /

异常值:
反向'详细',参数'(1L,)'和关键字参数'{}'未找到.尝试过0种模式:[]

当一切正常时,我为什么要努力工作 - 你问?这是因为我想使用不使用django-shop等命名空间的应用程序,当我为django-shop创建apphook时 - 出现了同样的问题.

mar*_*er_ 0

当您通过 CMS 中的 Apphook 使用应用程序时,您必须在模板中创建 URL 时提供命名空间。

一般来说,在创建应用程序时,我相信它是一种“最佳实践”方法,始终为您的应用程序和模板 URL 命名。

如果您使用的应用程序不使用app_nameMeta 属性,则可以在 root 中包含应用程序的 URL 时定义命名空间urls.py。看一下这里的例子;https://docs.djangoproject.com/en/1.7/topics/http/urls/#reversing-namespaced-urls