渲染时 NoReverseMatch:“django.contrib.auth.views.login”的反向

Posted

技术标签:

【中文标题】渲染时 NoReverseMatch:“django.contrib.auth.views.login”的反向【英文标题】:NoReverseMatch while rendering: Reverse for ''django.contrib.auth.views.login'' 【发布时间】:2011-06-02 11:55:01 【问题描述】:

我使用的是django的认证,在login.html模板中,下面的语句正在生成错误:

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

/login 处的模板语法错误

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

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

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

我已经安装了鉴权系统:

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

从 Django 1.10 开始:

从 Django 1.10 开始,不能再在 url()% url % 标记中使用字符串 'django.contrib.auth.views.login'

首先,更改您的 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 release notes)。

从 Django 1.3 开始:

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

% load url from future %

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

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

在 Django 1.3 之前:

从该错误消息判断(注意视图路径周围的双单引号),我猜% url ... % 标记不需要引号,试试:

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

【讨论】:

@juankysmith - 发布一个新问题,包括您的模板代码和您的urls.py,然后在 cmets 中使用您的问题 URL 在此答案中对我进行 ping,我会很乐意看看。跨度> 也适合我。奇怪的是 the django docs 有引号...... 自从写了这个问题以来,% url % 标签的语法已经改变,现在它需要引号(如果你在 1.4 或更低版本中使用% load url from future %,或者如果你正在使用开发Django 的发布)。【参考方案2】:

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

【讨论】:

我认为您应该在答案中将这个link 包含在 django 1.3 发行说明中以提供一些上下文。

以上是关于渲染时 NoReverseMatch:“django.contrib.auth.views.login”的反向的主要内容,如果未能解决你的问题,请参考以下文章

渲染时 NoReverseMatch:“django.contrib.auth.views.login”的反向

NoReverseMatch at / 模板渲染期间出错

Django 捕获 NoReverseMatch - TemplateSyntaxError

在 Django 中使用 % url % 时的 NoReverseMatch

包含收藏按钮后的 NoReverseMatch

如何修复 NoReverseMatch Django 错误?