如何解决Django的NoReverseMatch错误



NoReverseMatch错误是说,Django中找不到你在任何已安装的应用程序网址提供的URL匹配的URL模式。

当根据提供的参数无法识别URLconf中的匹配URL时,django.core.urlresolvers会引发NoReverseMatch异常。

错误可能发生如下情况:

  • url匹配错误

    应用程序当前正在尝试访问该网址,但它包含无法匹配的网址

  • 反转'my_url_name'

    这是它找不到的网址的名称

  • 非关键字参数错误

    这些是它提供给url的非关键字参数

  • 关键字参数错误

    这些是它提供给url的关键字参数

  • 正则表达式模式匹配错误

    这些是它能够在您尝试匹配的urls.py文件中找到的模式

调试方法如下:

网址名称

  • 有没有错别字?
  • 您是否提供了试图访问给定名称的网址?
  • 如果您在应用程序中设置了app_name urls.py(例如app_name = 'my_app'),或者您在应用程序中包含了命名空间(例如include('myapp.urls', namespace='myapp'),那么您需要在撤消时包含命名空间,例如{% url 'myapp:my_url_name' %}reverse('myapp:my_url_name')

参数和关键字参数

参数和关键字参数用于匹配给定URL中存在的任何捕获组,这些捕获组可以由()url模式中的周围括号标识。

假设您匹配的url需要其他参数,请查看错误消息并首先查看给定参数的值是否正确。

如果他们不正确:

  • 值缺失或为空字符串

    这通常意味着您传入的值不包含您期望的值。看看你为它分配值,设置断点,你需要弄清楚为什么这个值没有正确传递。

  • 关键字参数有拼写错误

    在url模式或您正在构建的url中更正此问题。

如果他们是正确的:

  • 调试正则表达式

    您可以使用regexr等网站快速测试您的模式是否与您认为正在创建的网址相匹配,将网址模式复制到顶部的正则表达式字段中,然后使用文本区域包含您认为的任何网址应该匹配。

常见错误:

  • 匹配.通配符或任何其他正则表达式字符

    请记住使用\前缀来转义特定字符

  • 仅匹配大写/小写字符

    尝试使用a-Z\w代替a-zA-Z

  • 检查您匹配的模式是否包含在尝试的模式中

    如果它不在这里,那么您可能忘记在INSTALLED_APPS设置中包含您的应用程序(或者INSTALLED_APPS可能需要查看内部应用程序的顺序)