【问题标题】:NoReverseMatch ErrorNoReverseMatch 错误
【发布时间】:2011-06-26 05:54:00
【问题描述】:

我不断收到 django 登录系统的此错误。这是我的 urls.py 的一部分:

     (r'^contractManagement/login', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),

我得到的确切错误:

Exception Type: NoReverseMatch
Exception Value:    Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found.

我不明白为什么会出现此错误。如果您还需要什么,请告诉我。

【问题讨论】:

  • 你的反向声明在哪里?

标签: django django-authentication


【解决方案1】:

您看到''the.unknown.view'' 被报告包含太多 q​​outes。

这是因为 引用语法 在 Django 1.5 及更高版本中有效。对于 Django 1.3 或 1.4,您应该通过模板中的这一行来激活未来的行为:

{% load url from future %}

这对 Django 1.5 也有效。


Django 1.5+ 的示例

{% url "path.to.some.view" %}

Django

{% url path.to.some.view %}

【讨论】:

  • 啊,views.login docs 中的示例模板包含未来 url 的内容,但没有提及它的含义(我认为它与 extends "base.html" 行有关,所以忽略了它,并且..因此结束了这个问题!)
【解决方案2】:

我会给你的 url 一个名字(为了做到这一点,你需要使用 url 方法)另外你应该在你所有的 url 中添加一个斜杠,因为 django CommonMiddleware 将在上进行 302 重定向如果你不这样做,你所有的网址:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
     url(r'^contractManagement/login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='contract_login'),

)

然后您可以在代码中使用 reverse,或在模板中使用 url,如果您决定更改实际 url(即:changedCotractManagement/login/),只要名称相同,您的代码仍将做个好人。

在代码中:

from django.core.urlresolvers import reverse
reverse('contract_login')

在模板中:

{% url contract_login %}

编辑:每个 MrOodles

【讨论】:

  • 反向导入:from django.core.urlresolvers import reverse
【解决方案3】:

您没有显示您尝试反转此 URL 的位置,但看起来您已将其双引号。如果您使用的是url 标签,请注意您不需要在 url 名称周围加上引号:

{% url django.contrib.auth.views.login %}

不是

{% url 'django.contrib.auth.views.login' %}

【讨论】:

  • 那么这是教程中的错误吗?正如我刚刚解决的那样。
  • 是的,这似乎是docs.djangoproject.com/en/dev/topics/auth/…示例教程中的一个缺陷
  • 总而言之,Django 1.4 不应该有引号,而 1.5 需要它们。关于这个问题的更多细节:stackoverflow.com/questions/10358929/…
  • 从 Django 1.5 开始,使用 qoutes 是语法的一部分。对于 1.4 及以下版本,不需要 qoutes。
猜你喜欢
  • 2016-12-14
  • 2015-10-24
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2017-07-30
相关资源
最近更新 更多