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

Django - использование обратного URL-адреса в настройках

Несколько параметров в файле настроек django - это URL-адреса, например LOGIN_URL и LOGIN_REDIRECT_URL. Можно ли избежать жесткого кодирования этих URL-адресов и вместо этого использовать обратное отображение URL-адресов? На данный момент это действительно единственное место, где я нахожу, что пишу одинаковые URL-адреса в нескольких местах.

4b9b3361

Ответ 1

Django 1.5 и более поздние версии

Начиная с Django 1.5, LOGIN_URL и LOGIN_REDIRECT_URL принимают именованные шаблоны URL. Это означает, что вам не нужно жестко указывать какие-либо URL-адреса в настройках.

LOGIN_URL = 'login'  # name of url pattern

Для Django 1.5 - 1.9 вы также можете использовать имя функции представления, но это не рекомендуется, поскольку оно устарело в Django 1.8 и не будет работать в Django 1.10 +.

LOGIN_URL = 'django.contrib.auth.views.login' # path to view function

Django 1.4

Для Django 1.4 вы можете использовать reverse_lazy

LOGIN_URL = reverse_lazy('login')

Django 1.3 и ранее

Это оригинальный ответ, который работал до того, как reverse_lazy был добавлен в Django

В urls.py параметры импорта:

from django.conf import settings

Затем добавьте шаблон URL

urlpatterns=('',
    ...
    url('^%s$' %settings.LOGIN_URL[1:], 'django.contrib.auth.views.login', 
        name="login")
    ...
)

Обратите внимание, что вам нужно нарезать LOGIN_URL, чтобы удалить ведущую косую черту.

В оболочке:

>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'