我只是在试用django并按照文档进行身份验证。
基本上我想查看用户登录表单页面,但我得到了:
Caught NoReverseMatch while rendering: Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found.
我的urls.py文件:
from django.conf.urls.defaults import patterns, include, url
urlpatterns = patterns('',
url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
)
我的settings.py(INSTALLED_APPS)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
专门针对该行:
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
答案 0 :(得分:35)
尝试为url设置名称并在url标记中使用它:
url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),
并在模板中:
<form method="post" action="{% url 'login' %}">
答案 1 :(得分:16)
试试这个:
url(r'^accounts/login$', 'django.contrib.auth.views.login'),
编辑后:
<form method="post" action="{% url django.contrib.auth.views.login %}">
修改强>
在django的settings.py
文件中,这一行:
APPEND_SLASH = False
告诉您的反向网址是否以斜线结尾。然后
APPEND_SLASH = True
url(r'^accounts/login/', 'django.contrib.auth.views.login')
应该也可以。
答案 2 :(得分:5)
尝试在网址
中添加name ='login'作为关键字url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),
然后调用reverse('login')。
答案 3 :(得分:4)
在我看来,更好的 urls.py 文件(要干净且仍然非常明确),也为Django 1.10更新了:
from django.conf.urls import url
from django.contrib.auth import views as auth_views
urlpatterns = [
url(r'^accounts/login/$', auth_views.login, name='login')
]
在模板中:
<form method="post" action="{% url 'login' %}">
请注意,url
现在需要一个字符串,因此模板中的'login'
必须使用引号。
答案 4 :(得分:1)
这与在project / urls.py文件中命名空间的应用网址有关。 一种解决方案是删除命名空间并明确写出每个URL,但是对于这个特定的问题......
这应该有效:
<form method="post" action="{% url '<namespace_name>:django.contrib.auth.views.login' %}">