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' %}">
Ответы
Ответ 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' %}">