django - 登录视图没有反向匹配

Ale*_*and 26 django

我只是尝试django并按照文档进行身份验证.

基本上我想看看用户登录表单页面,但我得到:

Caught NoReverseMatch while rendering: Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)

我的urls.py文件:

from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('',
    url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
)
Run Code Online (Sandbox Code Playgroud)

我的settings.py(INSTALLED_APPS)

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
Run Code Online (Sandbox Code Playgroud)

编辑:我意识到我在看错了.模板文件中发生错误:

{% 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>
Run Code Online (Sandbox Code Playgroud)

专门针对该行:

<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
Run Code Online (Sandbox Code Playgroud)

ssb*_*sbb 37

尝试为url设置名称并在url标记中使用它:

url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),
Run Code Online (Sandbox Code Playgroud)

并在模板中:

<form method="post" action="{% url 'login' %}">
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在1.5及更高版本中,`url`需要一个字符串,因此您需要引号,即`{%url'login'%}` (7认同)
  • 我认为这是正确的.其他答案一直建议引用python包路径而不是模板的post url中的名称 (5认同)
  • +1 - 很好地使用命名网址模式以避免歧义.更好的方法是使用`action ="{%url'myapp:login'%}"` (2认同)

asd*_*hak 18

试试这个:

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

在你编辑之后:

<form method="post" action="{% url django.contrib.auth.views.login %}">
Run Code Online (Sandbox Code Playgroud)

编辑settings.pyDjango中,该行的文件:

APPEND_SLASH = False

告诉您反向网址是否以斜线结尾.然后

APPEND_SLASH = True
url(r'^accounts/login/', 'django.contrib.auth.views.login')
Run Code Online (Sandbox Code Playgroud)

也应该工作.


Jef*_*ffS 5

尝试在网址中添加name ='login'作为关键字

url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),
Run Code Online (Sandbox Code Playgroud)

然后调用reverse('login').