【问题标题】:Django NoReverseMatch: Reverse not found, not a valid view function or pattern nameDjango NoReverseMatch:找不到反向,不是有效的视图函数或模式名称
【发布时间】:2019-04-21 09:05:10
【问题描述】:

我有一个 Django 应用程序在几天前正确解析了 url,但现在不再这样做了。查看我的 git 日志,没有任何与 url 相关的更改,但突然出现 Django 没有为相关应用程序加载 url。

调试页面显示应用已安装(尽管它是加载顺序中的最后一个,如果这很重要的话)。我看到的行为暗示 Django 要么忽略或覆盖应用程序的 urls.py 文件的只有某些部分——但是,应用程序在同一个 urls.py 文件中定义的一些 url 会加载!

命名空间:虽然它可能会解决这个问题,但我正在尝试覆盖现有的非命名空间 url,并且无法重构存在于我的应用范围之外的代码来建立命名空间。所以这不是一个选择。我只是想胜过父项目的 url 解析,所以我的视图被调用而不是 stock。

模板标签:它们看起来是正确的,但更重要的是,这与渲染失败无关,而是与最初不存在的 url 有关。

示例:有问题的视图名称是“objects”,但这些对象视图都不起作用。作为我的困惑来源的一个例子,这是我在访问虚假页面 (/efwefwefijiefj/) 时遇到的 404 错误的内容:

Using the URLconf defined in web.urls, Django tried these URL patterns, in this order:
    ^objects/detail/(?P<slug>[\w\d\-]+)/(?P<pk>[0-9]+)/$ [name='object-detail']
    ^objects/create/$ [name='object-create']
    ^objects/$ [name='objects']
    ...

我们都可以看到objects 是一个命名视图,它所属的应用程序存在,并且它是第一个评估的 URL 之一。但是,如果您尝试真正转到/objects/ 页面,则会收到NoReverseMatch 错误。

任何帮助将不胜感激!

【问题讨论】:

  • 请发布您的配置。
  • 检查你的url模板标签

标签: python django


【解决方案1】:

我检查了所有模板标签、url 模式、应用程序加载顺序和 url 解析。没有任何效果。

当我开始从我的应用程序中剥离每个 URL 模板标签时,我在 FormView 的 success_url 上遇到了另一个 NoReverseMatch reverse()

这是我所做的最后更改之一,但应该绝对存在;由于 Django 加载内容不一致/乱序而导致出现错误,我通过将其更改为 reverse_lazy() 推迟了该 url 的反转。

现在一切正常。过早反转的 URL 作为基于类的视图的属性,与 objects 视图本身无关,是导致此难以置信的不透明错误的原因。

我应该知道得更好,但 Django 提供的初始诊断信息根本没有帮助,所以我把它留在那里作为其他东西来检查你是否遇到这个错误——大多数其他问题/答案都属于微不足道的urls.py 中的正则表达式错误或模板标签的滥用。

不要将基于类的视图属性设置为reverse() 的结果——使用reverse_lazy() 来说明所有尚未加载的应用程序!

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2019-05-19
    • 2018-01-25
    • 2019-06-27
    • 2019-06-01
    • 2021-07-18
    • 2021-08-02
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多