渲染时 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”的反向
Django 捕获 NoReverseMatch - TemplateSyntaxError