渲染时的NoReverseMatch:对于'';django.contrib.auth.views.login'';

渲染时的NoReverseMatch:对于'';django.contrib.auth.views.login'';,django,authentication,django-authentication,django-login,Django,Authentication,Django Authentication,Django Login,我正在使用Django的身份验证,在login.html模板中,以下语句生成错误: {% url 'django.contrib.auth.views.login' %} TemplateSyntaxError位于/登录 呈现时捕获到NoReverseMatch:找不到参数为“()”且关键字参数为“{}”的“django.contrib.auth.views.login”的反向 此url在my urls.py中定义: (r'^login$', 'django.contrib.auth.view

我正在使用Django的身份验证,在login.html模板中,以下语句生成错误:

{% url 'django.contrib.auth.views.login' %}
TemplateSyntaxError位于/登录

呈现时捕获到NoReverseMatch:找不到参数为“()”且关键字参数为“{}”的“django.contrib.auth.views.login”的反向

此url在my urls.py中定义:

(r'^login$', 'django.contrib.auth.views.login')
我已安装身份验证系统:

INSTALLED_APPS = (
    'django.contrib.auth',
...
)
有什么想法吗?

从Django 1.10开始: 从Django 1.10开始,在
url()
{%url%}
标记中不再可以使用字符串
'Django.contrib.auth.views.login'

首先,将您的url模式更改为使用callable,并命名url模式。例如:

from django.contrib.auth import views as auth_views

url_patterns = [
    url(r'^login$', auth_views.login, name='login'),
]
然后更新url标记以使用相同的名称:

{% url 'login' %}
自Django 1.5起: 您不再需要
{%loadurl from future%}
,只需使用引用的语法(
{%url'django.contrib.auth.views.login%}
)即可完成(请参阅)

自Django 1.3起: 请注意(正如Karen Tracey指出的),解决此问题的正确方法是添加:

{% load url from future %}
在模板顶部,然后使用:

{% url 'django.contrib.auth.views.login' %}
在Django 1.3之前: 根据该错误消息判断(注意视图路径周围的双引号),我猜标记不需要引号,请尝试:

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

带引号的语法在Django 1.3中是新的。修复1.3 forward上错误的正确方法是在模板中包含{%load url from future%}。

@juankysmith-发布一个新问题,包括模板代码和
url.py
,然后在这个答案的评论中用你的问题url ping我,我很乐意看一看。对我也有用。奇怪的是有引号…因为这个问题是写的,
{%url%}
标记的语法已经改变,现在它需要引号(如果您在1.4或更低版本中使用
{%load url from future%}
,或者如果您使用的是Django的开发版本).我认为你应该在回答django 1.3发行说明中包含这一点,以提供一些上下文。