渲染时的NoReverseMatch:反转''django.contrib.auth.views.login''

Nat*_*eed 26 authentication django django-authentication django-login

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

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

/ login时的TemplateSyntaxError

渲染时捕获NoReverseMatch:反向找到''django.contrib.auth.views.login'',其参数'()'和关键字参数'{}'未找到.

这个网址在我的urls.py中定义:

(r'^login$', 'django.contrib.auth.views.login')
Run Code Online (Sandbox Code Playgroud)

我安装了auth系统:

INSTALLED_APPS = (
    'django.contrib.auth',
...
)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Dom*_*ger 65

从Django 1.10开始:

由于Django的1.10,它是不再可能使用字符串'django.contrib.auth.views.login'url(){% url %}标签.

首先,更改您的url模式以使用callable,并命名url模式.例如:

from django.contrib.auth import views as auth_views

url_patterns = [
    url(r'^login$', auth_views.login, name='login'),
]
Run Code Online (Sandbox Code Playgroud)

然后更新您的网址标记以使用相同的名称:

{% url 'login' %}
Run Code Online (Sandbox Code Playgroud)

从Django 1.5开始:

你不需要{% load url from future %}了,只需使用引用的语法({% url 'django.contrib.auth.views.login' %})就可以了(参见Django 1.5发行说明).

从Django 1.3开始:

请注意,从Django 1.3开始(正如Karen Tracey在下面指出的那样),解决此问题的正确方法是添加:

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

在模板的顶部,然后使用:

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

在Django 1.3之前:

根据该错误消息判断(注意视图路径周围的双引号),我猜测{% url ... %}标签不需要引号,请尝试:

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

  • 也适合我.奇怪的是[django docs](https://docs.djangoproject.com/en/1.4/topics/auth/#django.contrib.auth.views.login)有引号...... (2认同)

小智 9

带引号的语法是Django 1.3中的新增功能.修正1.3向前错误的正确方法是在模板中加入{%load url from future%}.