首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django NoReverseMatch:反向未找到,不是有效的视图函数或模式名称

Django NoReverseMatch:反向未找到,不是有效的视图函数或模式名称
EN

Stack Overflow用户
提问于 2018-11-19 01:44:13
回答 1查看 900关注 0票数 1

我有一个Django应用程序,在几天前正确地解析了urls,但现在不再这么做了。查看我的git日志,与urls相关的任何内容都没有改变,但是突然出现了Django没有为所讨论的应用程序加载urls。

调试页面显示应用程序已经安装(尽管它是加载顺序中的最后一个,如果这很重要的话)。我所看到的行为意味着Django忽略或只覆盖了应用程序urls.py文件的某些部分--应用程序在同一个urls.py文件中定义的一些urls可以加载!

命名空间:虽然它可能会使问题变得短暂,但我试图覆盖现有的非命名空间urls,而不能重构我的应用程序范围之外存在的代码来建立名称空间。因此,这不是一种选择。我只是想超越父项目的url决议,所以我的视图被调用而不是股票。

模板标记:它们看起来是正确的,但更重要的是,这不是渲染失败的问题,而是一开始就不存在的url。

示例:所讨论的视图名是“objects”,但这些对象视图都不起作用。作为我困惑之源的一个例子,下面是当我进入一个伪页面(/efwefwefijiefj/)时所得到的404错误的内容:

代码语言:javascript
复制
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错误。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2018-11-19 20:50:14

我检查了所有的模板标签,url模式,混淆了应用程序加载和url解析的顺序。什么都没用。

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

这是我做过的最后一次更改之一,但它应该是绝对存在的;计算出这整件事是一个错误,因为Django加载的东西不一致/无序,所以我将这个url更改为一个reverse_lazy()来推迟它的反转。

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

我应该更清楚地知道,但是Django提供的最初诊断信息一点帮助都没有,所以我把它留在这里,作为检查您是否遇到这个错误的其他东西--大多数其他的问题/答案都与urls.py中的琐碎正则表达式错误或模板标记的误用有关。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53367275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档