Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 什么是NoReverseMatch错误,如何修复它?_Django_Django Urls - Fatal编程技术网

Django 什么是NoReverseMatch错误,如何修复它?

Django 什么是NoReverseMatch错误,如何修复它?,django,django-urls,Django,Django Urls,我有一些代码,当它执行时,它抛出一个NoReverseMatch,说: 找不到参数为“()”且关键字参数为“{}”的“my_url_name”的/my_url/Reverse处的NoReverseMatch。已尝试n个模式:[] 这意味着什么,我能做些什么?错误是Django无法找到与您在任何已安装应用程序的url中提供的url匹配的url模式 当无法根据提供的参数识别URLconf中的匹配URL时,django.core.urlResolver会引发NoReverseMatch异常 要开始调试

我有一些代码,当它执行时,它抛出一个NoReverseMatch,说:

找不到参数为“()”且关键字参数为“{}”的“my_url_name”的/my_url/Reverse处的NoReverseMatch。已尝试n个模式:[]

这意味着什么,我能做些什么?

错误是Django无法找到与您在任何已安装应用程序的url中提供的url匹配的url模式

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

要开始调试它,您需要先取消选中提供给您的错误消息

  • NoReverseMatch at/my_url/

    这是当前正在呈现的url,也是应用程序当前尝试访问的url,但它包含无法匹配的url

  • “我的url\u名称”的反面

    这是找不到的url的名称

  • 带参数“()”和

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

  • 找不到关键字参数“{}”

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

  • 已尝试n个模式:[]

    这些是它能够在URL.py文件中找到的模式,它试图匹配这些模式

首先,在源代码中查找与当前呈现的url(url、视图和涉及的任何模板)相关的代码。在大多数情况下,这将是您当前开发的代码的一部分

完成此操作后,请按照django将遵循的顺序通读代码,直到到达试图为您的
my\u url\u name
构建url的代码行。同样,这可能是你最近改变的地方

现在您已经发现了错误发生的位置,请使用错误消息的其他部分来解决问题

url名称
  • 有打字错误吗
  • 您是否提供了试图访问给定名称的url
  • 如果您在应用程序的
    url.py
    (例如
    app\u name='my\u app'
    )中设置了app\u name,或者如果您在应用程序中包含了一个名称空间(例如
    include('myapp.url',namespace='myapp')
    ,则在反转时需要包含名称空间,例如
    {%url'myapp:my\u url\u name'
    反转('myapp:my\u url\u name'))
参数和关键字参数 参数和关键字参数用于匹配给定url中存在的任何捕获组,这些捕获组可以通过url模式中周围的
()
括号识别

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

如果它们不正确:

  • 缺少值或为空字符串

    这通常意味着您要传递的值不包含您期望的值。请查看为其分配值的位置,设置断点,然后您需要找出此值无法正确传递的原因

  • 关键字参数有输入错误

    在url模式或正在构建的url中更正此错误

如果它们是正确的:

  • 调试正则表达式

    您可以使用这样的网站快速测试您的模式是否与您认为正在创建的url匹配,将url模式复制到顶部的regex字段中,然后使用文本区域包含您认为应该匹配的任何url

    常见错误:

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

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

    • 仅与小写/大写字符匹配

      尝试使用
      a-Z
      \w
      而不是
      a-Z
      a-Z

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

    如果不在此处,则可能是您忘记将您的应用程序包含在
    已安装的应用程序
    设置中(或者
    已安装的应用程序
    中的应用程序顺序可能需要查看)

Django版本 在Django 1.10中,删除了通过python路径反转url的功能。应改用命名路径



如果你仍然无法找到问题所在,那么请随意提出一个新问题,其中包括你尝试过的内容、你研究过的内容(你可以链接到这个问题),然后包括与问题相关的代码-您正在匹配的url、任何相关的url模式、显示django试图匹配的内容的错误消息部分,以及可能的
安装的应用程序设置(如果适用)。

并确保您的路线在路线列表中:

./manage.py show_urls | grep path_or_name

可能是它没有加载您期望的模板。我添加了一个从
UpdateView
继承的新类-我以为它会自动从我命名的类中选取模板,但它实际上是基于类的
model
属性加载的,这导致了另一个(错误)正在加载模板。一旦我为新类显式设置了
template\u name
,它就工作得很好了。

最后我们有了一个标准答案,我们可以作为dup目标提供。您可以详细说明django 1.10中的命名路径吗?是的,
在应用程序的URL.py中设置应用程序名称(例如,应用程序名称='my\u应用程序')
我觉得这个live regex测试仪更有帮助:感谢您提供关于NoReverseMatch的精彩教程!我能够解决我的问题。﹣1
show_url
不是Django功能,这不会回答问题。