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

NoReverseMatch при рендеринге: Реверс для '' django.contrib.auth.views.login ''

Я использую аутентификацию Django, а в шаблоне login.html следующий оператор генерирует ошибку:

{% url 'django.contrib.auth.views.login' %}

TemplateSyntaxError at/login

Caught NoReverseMatch при рендеринге: Обратный для '' django.contrib.auth.views.login '' с аргументами '()' и аргументами ключевого слова '{}' не найден.

Этот URL-адрес определен в моем urls.py:

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

Я установил систему auth:

INSTALLED_APPS = (
    'django.contrib.auth',
...
)

Любые идеи?

4b9b3361

Ответ 1

По состоянию на Django 1.10:

Как и в Django 1.10, более невозможно использовать строку 'django.contrib.auth.views.login' в url() или теге {% url %}.

Сначала измените свои шаблоны url, чтобы использовать вызываемые, и назовите шаблон url. Например:

from django.contrib.auth import views as auth_views

url_patterns = [
    url(r'^login$', auth_views.login, name='login'),
]

Затем обновите тэг url для использования того же имени:

{% url 'login' %}

Как по Django 1.5:

Вам больше не нужно {% load url from future %}, просто используйте цитированный синтаксис ({% url 'django.contrib.auth.views.login' %}), и все готово (см. Django 1.5 примечания к выпуску).

Как по Django 1.3:

Обратите внимание, что от Django 1.3 (как указывает Карен Трейси ниже), правильный способ исправить это - добавить:

{% load url from future %}

в верхней части шаблона, а затем используйте:

{% url 'django.contrib.auth.views.login' %}

До Django 1.3:

Судя по этому сообщению об ошибке (обратите внимание на двойные кавычки вокруг пути к представлению), я бы предположил, что {% url ... %} не хочет кавычек, попробуйте:

{% url django.contrib.auth.views.login %}

Ответ 2

Синтаксис с кавычками является новым в Django 1.3. Правильный способ исправить ошибку в 1.3 forward будет включать {% load url from future%} в шаблоне.