我使用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"
...polls/templates/polls/index.html:
...
{% for poll in latest_poll_list %}
<li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li>
{% endfor %}
...但是,当我从index.html中删除“app_name:”部分时,它将无法工作(PollsApp中是否存在app_name字段也无关紧要),我得到了以下错误:
NoReverseMatch /民意测验/ 例外值: 相反的‘细节’与参数'(1L,)‘和关键字参数'{}’不找到。0已尝试的模式:[]
当一切顺利的时候,我为什么要让我的生活变得艰难呢?这是因为我想使用不使用像django-shop这样的名称空间的应用程序,而且当我为django-shop创建apphook时,也出现了同样的问题。
发布于 2015-03-15 17:18:10
当您通过CMS中的App钩子使用应用程序时,当在模板中创建URL时,您必须为其提供一个名称空间。
一般来说,在创建应用程序时,我相信这是一种“最佳实践”方法,它总是命名你的应用程序和模板URL。
如果使用的应用程序不使用app_name元属性,则可以在根urls.py中包含应用程序的URL时定义名称空间。查看这里的示例;https://docs.djangoproject.com/en/1.7/topics/http/urls/#reversing-namespaced-urls
https://stackoverflow.com/questions/23809663
复制相似问题