8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

ryandra 2月前

55 0

我有一些代码,当它执行时,它会抛出一个 NoReverseMatch,说:在 /my_url/ Reverse for 'my_url_name' 中未找到带有参数 '()' 和关键字参数 '{}' 的 NoReverseMatch。n 模式...

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

/my_url/ 处的 NoReverseMatch 未找到带有参数 '()' 和关键字参数 '{}' 的 'my_url_name' 反向。已尝试 n 种模式:[]

这意味着什么?我该怎么办?

帖子版权声明 1、本帖标题:什么是 NoReverseMatch 错误?如何修复它?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由ryandra在本站《django》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 错误 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 。同样,这可能是您最近更改的地方。

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

    网址名称

    • 有错别字吗?
    • 您是否提供了尝试访问给定名称的 URL?
    • 如果你已经在应用程序中设置了 app_name urls.py (例如 app_name = 'my_app' ),或者你使用命名空间包含了应用程序(例如 include('myapp.urls', namespace='myapp') ,那么在逆向时你需要包含命名空间,例如 {% url 'myapp:my_url_name' %} reverse('myapp:my_url_name') .
    • 当您尚未设置应用程序名称或未在 URL 中包含命名空间时, reverse('myapp:my_url_name') 您是否尝试使用命名空间(例如)进行反转
    • 您是否忘记了 URL 名称周围的引号,而写了类似的内容 {% url my_url_name %} 来代替 {% url 'my_url_name' %}

    参数和关键字参数

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

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

    如果不正确:

    • 第19页

      第20页

    • 第21页

      第22页

    如果他们正确:

    • 第24页

      第25页

      第26页

      • 【【p27】】

        【【p28】】

      • 【【p29】】

        【【p30】】

    • p31

      p32

      • It's possible that you have forgotten to include your app within the INSTALLED_APPS setting (or the ordering of the apps within INSTALLED_APPS may need looking at)
      • Check whether you've forgotten to include the specific URLs file in the ROOT_URLCONF or another URL file which is included in ROOT_URLCONF .

    Django 版本

    在 Django 1.10 中,通过 Python 路径反转 URL 的功能已被删除。应改用命名路径。


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

  • 是的,在应用程序的urls.py中设置app_name(例如app_name ='my_app')是重点

  • 感谢您提供关于 NoReverseMatch 的精彩教程!我能够解决我的问题。

  • 注意在 reverse() 和 redirect() 之间传递的不同参数,例如:

    url(r"^some_app/(?P<some_id>\d+)/$", some_view_function, name="some_view")
    

    将与以下机构合作:

    reverse("some_view", kwargs={"some_id": my_id})
    

    和:

    redirect("some_view", some_id=my_id)
    

    但不适用于:

    reverse("some_view", some_id=my_id)
    

    和:

    redirect("some_view", kwargs={"some_id": my_id})
    
  • 一个非常常见的错误是当你得到 with arguments ('',) 。这是由类似这样的事情引起的:

    {% url 'view-name' does_not_exist %}
    

    由于 does_not_exist 不存在,django 将其评估为空字符串,从而导致此错误消息。

    如果您安装 django-fastdev (我开发和维护的),您将会得到一个不错的崩溃提示,提示 does_not_exist 不存在,这才是真正的问题。

  • 使用 django-extensions 你可以确保你的路线在路线列表中:

    ./manage.py show_urls | grep path_or_name
    

    如果缺少路线,您可能尚未导入该应用程序。

  • 可能是它没有加载您期望的模板。我添加了一个继承自的新类 UpdateView - 我以为它会自动从我命名的类中选择模板,但它实际上根据 model 类上的属性加载了它,这导致加载了另一个(错误的)模板。一旦我明确设置了 template_name 新类,它就可以正常工作了。

  • 参数部分通常是来自模型的对象。记得将其添加到视图中的上下文中。否则,模板中对该对象的引用将为空,因此无法与具有 object_id 的 url 匹配。

返回
作者最近主题: