几天前,我有一个Django应用可以正确解析网址,但现在不再这样做了。查看我的git日志,没有任何与url相关的更改,但是突然之间,似乎Django没有为有问题的应用程序加载url。
“调试”页面显示该应用程序已安装(如果重要的话,它是加载顺序中的最后一个)。我看到的行为暗示Django只是忽略或覆盖了应用程序urls.py文件的仅某些部分-由应用程序在同一urls.py文件中定义的某些URL会加载!
Namespacing :尽管这可能会使问题暂时解决,但我仍在尝试覆盖现有的未命名间隔的url,并且无法重构应用范围之外的代码来建立命名空间。所以这不是一个选择。我只想胜过父项目的url解析度,以便调用我的视图而不是库存。
模板标记:它们看起来正确,但更重要的是,这与渲染失败无关,它与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
错误的时候。
任何帮助将不胜感激!
答案 0 :(得分:0)
我检查了所有模板标签,URL模式,应用程序加载和URL解析的顺序。什么都没用。
当我开始剥离从应用程序中写出的每个URL模板标记时,我在FormView的NoReverseMatch
上遇到了另一个reverse()
和success_url
。
那是我所做的最后更改之一,但是应该绝对存在;弄清楚整个事情是一个错误,这是由于Django不一致地/无序地加载东西而出现的,我通过将其更改为reverse_lazy()
来推迟了该URL的反向操作。
现在一切正常。过早反转的URL作为与objects
视图本身无关的基于类的视图的属性,是导致此异常不透明的错误的原因。
我应该知道得更多,但是Django提供的初始诊断信息完全没有帮助,因此我将其保留在其他地方,以检查您是否遇到此错误-其他大多数问题/答案都与琐碎有关urls.py
中的正则表达式错误或模板标记的滥用。
请勿将基于类的视图属性设置为reverse()
的结果-使用reverse_lazy()
来说明尚未加载的所有应用程序!