26

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

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

/login 处的 TemplateSyntaxError

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

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

(r'^login$', 'django.contrib.auth.views.login')

我已经安装了认证系统:

INSTALLED_APPS = (
    'django.contrib.auth',
...
)

有任何想法吗?

4

2 回答 2

65

从 Django 1.10 开始:

从 Django 1.10 开始,不再可以使用字符串'django.contrib.auth.views.login'inurl(){% url %}标签。

首先,更改您的 url 模式以使用可调用对象,并命名 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 开始:

您不再需要{% 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 %}

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

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

在 Django 1.3 之前:

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

{% url django.contrib.auth.views.login %}
于 2011-01-02T14:37:11.373 回答
9

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

于 2011-05-29T14:07:04.653 回答