Подтвердить что ты не робот

Django - нет обратного соответствия для входа в систему

Я просто пытаюсь выполнить 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'),
)

Мои настройки .py(INSTALLED_APPS)

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)

EDIT: Я понял, что искал неправильную вещь. Ошибка возникает в файле шаблона:

{% 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' %}">
4b9b3361

Ответ 1

Попробуйте следующее:

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

И после вашего редактирования:

<form method="post" action="{% url django.contrib.auth.views.login %}">

ИЗМЕНИТЬ в файле settings.py django, эта строка:

APPEND_SLASH = False

указывает, заканчивается ли ваш обратный URL-адрес с косой чертой или нет. Тогда

APPEND_SLASH = True
url(r'^accounts/login/', 'django.contrib.auth.views.login')

также должен работать.

Ответ 2

Попробуйте установить имя для URL-адреса и использовать его в теге url:

url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),

и в шаблоне:

<form method="post" action="{% url 'login' %}">

Ответ 3

Попробуйте добавить name= 'login' в качестве ключевого слова в url

url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),

а затем вызов reverse ('login').

Ответ 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' в шаблоне должен быть в кавычках.

Ответ 5

Это связано с расширением имен ваших URL-адресов приложений в файле project/urls.py. Одним из решений является удаление пространства имен и запись каждого URL явно, но для этой конкретной проблемы...

Это должно работать:

<form method="post" action="{% url '<namespace_name>:django.contrib.auth.views.login' %}">