NoReverseMatch错误

Dea*_*ean 33 django django-authentication

我一直在为django登录系统收到此错误.这是我的urls.py的一部分:

     (r'^contractManagement/login', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
Run Code Online (Sandbox Code Playgroud)

我得到的确切错误:

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

我无法理解为什么我会收到此错误.如果您还需要其他信息,请告诉我.

Dan*_*man 44

您没有显示您尝试撤消此URL的位置,但看起来您已对其进行了双重引用.如果您使用的是url标记,请注意您的网址名称周围不需要引号:

{% url django.contrib.auth.views.login %}
Run Code Online (Sandbox Code Playgroud)

{% url 'django.contrib.auth.views.login' %}
Run Code Online (Sandbox Code Playgroud)

  • 这是教程中的错误吗?正如我刚刚解决的那样. (6认同)
  • 总而言之,Django 1.4不应该有引号,而1.5则需要引号.关于这个问题的更多细节:http://stackoverflow.com/questions/10358929/url-gives-me-noreversematch-error-while-reverse-returns-the-url-just-fin (6认同)

hyn*_*cer 19

你看到''the.unknown.view''报道包括太多qoutes.

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

{% load url from future %}
Run Code Online (Sandbox Code Playgroud)

这对Django 1.5也有效.


Django 1.5+的示例

{% url "path.to.some.view" %}
Run Code Online (Sandbox Code Playgroud)

Django <= 1.4.x(没有"future"命令)的经典语法是:

{% url path.to.some.view %}
Run Code Online (Sandbox Code Playgroud)


Mat*_*odd 6

我会给你的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'),

)
Run Code Online (Sandbox Code Playgroud)

然后你可以在代码中使用reverse,或者在你的模板中使用url,如果你决定更改实际的url(即:changedCotractManagement/login /),只要名称相同,你的代码仍然会很好.

在代码中:

from django.core.urlresolvers import reverse
reverse('contract_login')
Run Code Online (Sandbox Code Playgroud)

在模板中:

{% url contract_login %}
Run Code Online (Sandbox Code Playgroud)

编辑:按照MrOodles