我有一些代码,当它执行时,它会抛出一个 NoReverseMatch,说:在 /my_url/ Reverse for 'my_url_name' 中未找到带有参数 '()' 和关键字参数 '{}' 的 NoReverseMatch。n 模式...
我有一些代码,当它执行时,它会抛出一个NoReverseMatch,说:
/my_url/ 处的 NoReverseMatch 未找到带有参数 '()' 和关键字参数 '{}' 的 'my_url_name' 反向。已尝试 n 种模式:[]
这意味着什么?我该怎么办?
错误 NoReverseMatch
表明 Django 无法在您安装的任何应用程序的 URL 中找到与您提供的 URL 匹配的 URL 模式。
当根据提供的参数无法识别 URLconf 中的匹配 URL 时,django.core.urlresolvers 会引发 NoReverseMatch 异常。
要开始调试它,您需要首先分析给您的错误消息。
p3
p4
p5
p6
p7
p8
p9
p10
p11
p12
首先在源代码中找到与当前正在呈现的 URL 相关的代码 - URL、视图和所涉及的任何模板。在大多数情况下,这将是您当前正在开发的代码的一部分。
完成此操作后,按照 django 的顺序阅读代码,直到到达尝试为您的 构建 url 的代码行 my_url_name
。同样,这可能是您最近更改的地方。
现在您已经发现错误发生的位置,请使用错误消息的其他部分来解决问题。
urls.py
(例如 app_name = 'my_app'
),或者你使用命名空间包含了应用程序(例如 include('myapp.urls', namespace='myapp')
,那么在逆向时你需要包含命名空间,例如 {% url 'myapp:my_url_name' %}
或 reverse('myapp:my_url_name')
.
reverse('myapp:my_url_name')
您是否尝试使用命名空间(例如)进行反转
{% url my_url_name %}
来代替 {% url 'my_url_name' %}
?
参数和关键字参数用于匹配给定 url 中存在的任何捕获组,这些捕获组可以通过 ()
url 模式中的括号识别。
假设您匹配的 url 需要额外的参数,请查看错误消息,并首先查看给定参数的值是否正确。
如果不正确:
第19页
第20页
第21页
第22页
如果他们正确:
第24页
第25页
第26页
【【p27】】
【【p28】】
【【p29】】
【【p30】】
p31
p32
INSTALLED_APPS
setting (or the ordering of the apps within INSTALLED_APPS
may need looking at) ROOT_URLCONF
. 在 Django 1.10 中,通过 Python 路径反转 URL 的功能已被删除。应改用命名路径。
如果您仍然无法找到问题,那么请随意提出一个新问题,其中包括您尝试过的内容、您研究过的内容(您可以链接到这个问题),然后将相关代码包含在问题中 - 您匹配的url,任何相关的url模式,显示django尝试匹配的错误消息的部分,以及可能 INSTALLED_APPS
适用的设置。