什么是NoReverseMatch错误,我该如何解决?
我有一些代码,当它执行时,它会抛出一个NoReverseMatch,说:
NoReverseMatch at / my_url / Reverse找不到参数'()'和关键字参数'{}'的'my_url_name'。 尝试n个模式:[]
这是什么意思,我能做些什么呢?
NoReverseMatch
错误是说,Django无法为您在任何已安装的应用程序的url中提供的urlfind匹配的url模式。
如果根据提供的参数无法识别URLconf中的匹配URL,则由django.core.urlresolvers引发NoReverseMatchexception。
要开始debugging它,你需要首先检查给你的错误信息。
-
NoReverseMatch at / my_url /
这是目前正在呈现的url,它是您的应用程序当前正在尝试访问的这个url,但它包含无法匹配的url
-
反向“my_url_name”
这是它无法find的url的名称
-
与参数'()'和
这些是它提供给url的非关键字参数
-
未find关键字参数“{}”。
这些是它提供给url的关键字参数
-
尝试n个模式:[]
这些是它能够在你试图匹配的urls.py文件中find的模式
首先在源代码中查找与当前正在呈现的url相关的代码 – url,视图以及所涉及的任何模板。 在大多数情况下,这将是您正在开发的代码的一部分。
一旦你完成了这个工作,按照django将会跟随的顺序读取代码,直到你到达为你的my_url_name
构造一个url的代码行。 再次,这可能是你最近改变的地方。
现在您已经发现错误发生的位置,请使用错误消息的其他部分来解决问题。
url名称
- 有错别字吗?
- 你提供了你想要访问给定名称的url吗?
- 如果你包含了一个名字空间的应用程序(例如
include('myapp.urls', namespace='myapp')
,那么你需要在反转时包含名字空间,例如{% url 'myapp:my_url_name' %}
或者reverse('myapp:my_url_name')
。
参数和关键字参数
参数和关键字参数用于匹配存在于给定url中的任何捕获组,这些捕获组可以通过url模式中的()
括号来标识。
假设你正在匹配的URL需要额外的参数,请看看错误消息,并首先看看给定参数的值是否正确。
如果他们不正确:
-
该值缺失或一个空string
这通常意味着您传入的值不包含您所期望的值。 看看你为它分配值,设置断点,你需要弄清楚为什么这个值不能正确传递。
-
关键字参数有一个错字
在url模式或者你正在构build的url中纠正这个问题。
如果他们是正确的:
-
debugging正则expression式
您可以使用regexr等网站快速testing您的模式是否与您认为正在创build的url匹配,将url模式复制到顶部的正则expression式字段中,然后使用文本区域来包含您认为它的任何url应该匹配。
常见错误:
-
匹配反对
.
通配符或任何其他正则expression式字符请记住用
\
前缀转义特定字符 -
只能匹配低/大写字符
尝试使用
aZ
或\w
而不是az
或AZ
-
-
检查你正在匹配的模式是否包含在尝试过的模式中
如果它不在这里,那么你可能忘记在
INSTALLED_APPS
设置中包含你的应用程序(或者INSTALLED_APPS
中的应用程序可能需要查看)
Django版本
在Django 1.10中,通过pythonpath反转url的function已被删除。 应该使用命名的path。
如果你仍然无法find问题,那么随时提出一个新的问题,包括你已经尝试了什么,你已经研究了什么(你可以链接到这个问题),然后包括相关的代码问题 – 你匹配的url,任何相关的url模式,显示django试图匹配的错误消息部分,以及可能的INSTALLED_APPS
设置(如果适用的话)。