我一直在为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.
我无法理解为什么我会收到此错误。如果您还需要其他信息,请告诉我。
答案 0 :(得分:44)
您没有显示您尝试撤消此网址的位置,但看起来您已对其进行双重引用。如果您使用的是url
代码,请注意您的网址名称周围不需要引号:
{% url django.contrib.auth.views.login %}
不
{% url 'django.contrib.auth.views.login' %}
答案 1 :(得分:19)
您会看到报告的''the.unknown.view''
包含太多qoutes。
这是因为引用语法在Django 1.5及更高版本中有效。对于Django 1.3或1.4,您应该在模板中通过以下行激活未来行为:
{% load url from future %}
也适用于Django 1.5。
Django 1.5 +的示例
{% url "path.to.some.view" %}
Django< = 1.4.x(没有“future”命令)的经典语法是:
{% url path.to.some.view %}
答案 2 :(得分:6)
我会给你的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 编辑