【问题标题】:NoReverseMatch when using Apphook without namespace使用没有命名空间的 Apphook 时的 NoReverseMatch
【发布时间】:2014-07-11 15:48:09
【问题描述】:

我使用 Django CMS 3 和 Django 1.6 以及默认的 django polls app ,我正在做 this 简短教程。

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

djangocms_polls/cms_app.py:

...
class PollsApp(CMSApp):
    name = _("Poll App")
    urls = ["polls.urls"]
    app_name = "polls"
...

投票/模板/投票/index.html:

...
{% for poll in latest_poll_list %}
    <li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li>
{% endfor %}
...

但是当我从 index.html 中删除“polls:”部分时,它不会起作用(而且 PollsApp 中是否存在 app_name 字段并不重要)并且我收到此错误:

NoReverseMatch 在 /polls/

异常值:
找不到带有参数“(1L,)”和关键字参数“{}”的“详细信息”。尝试了 0 个模式:[]

当一切正常时,我为什么要让我的生活变得艰难 - 你问?这是因为我想使用不使用名称空间的应用程序,例如 django-shop,并且当我为 django-shop 创建 apphook 时 - 发生了同样的问题。

【问题讨论】:

标签: django-cms


【解决方案1】:

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

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

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

【讨论】:

  • 但是,如果 djangocms 3.5.x 的 docs 告诉您应该从 urls.py 中删除应用程序,该怎么办? apphook 定义了一个 get_urls 方法,其中["apphookapp.urls"] 将被返回。所以无法在这里注入命名空间
  • @woodz app_name attr 是命名空间; docs.django-cms.org/en/latest/introduction/…
  • markwalker_: 当然可以,但是如果被挂钩的应用程序不使用命名空间 url,这将有什么帮助?您可以在 Apphook 类中为 app_name attr 定义任何简洁的名称。它仍然会出现 NoReverseMatch 错误,因为在挂钩应用程序的模板中 no url 可以被解析。在挂钩的应用程序中根本不知道命名空间。
  • @woodz 我不确定没有命名空间的 apphook 是否有效,因为您失去了对视图的控制并且无法将流量路由到您的视图。具体来说,CMS 基本视图是details。在 CMS 中为 apphooks 设置页面时,您需要定义应用程序实例名称。您还应该查看有关 apphook 配置的文档; docs.django-cms.org/en/latest/how_to/…
  • markwalker_:在 CMS 中为 apphooks 设置页面时,您需要定义应用程序实例名称。是的,当通过下拉 APPLICATION: 选择挂钩的应用程序时,它会由 Apphook 类的 app_name attr 自动填充。所以这个app_name attr 无论如何都是必需的,但它完全分散了如何处理没有命名空间的应用程序。文档必须在这里做出明确的解释。如果它是像 没有命名空间的应用程序不能被挂钩...... 这是一个至少明智的声明。 @azuax 提到的问题已经存档 4 年了,但没有解决。
猜你喜欢
  • 2015-09-04
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多