django - нет обратного соответствия для вида входа в систему - PullRequest
24 голосов
/ 25 декабря 2011

Я просто пробую 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' %}">

Ответы [ 5 ]

37 голосов
/ 26 декабря 2011

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

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

и в шаблоне:

<form method="post" action="{% url 'login' %}">
17 голосов
/ 26 декабря 2011

Попробуйте это:

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

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

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

EDIT в settings.py файле django, эта строка:

APPEND_SLASH = False

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

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

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

5 голосов
/ 25 декабря 2011

Попробуйте добавить имя = 'логин' в качестве ключевого слова в URL

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

и затем вызвать реверс ('логин').

4 голосов
/ 02 декабря 2016

По моему мнению, лучший 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' в шаблоне должно быть в кавычках.

1 голос
/ 09 января 2015

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

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

<form method="post" action="{% url '<namespace_name>:django.contrib.auth.views.login' %}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...