Несколько параметров в файле настроек django - это URL-адреса, например LOGIN_URL
и LOGIN_REDIRECT_URL
. Можно ли избежать жесткого кодирования этих URL-адресов и вместо этого использовать обратное отображение URL-адресов? На данный момент это действительно единственное место, где я нахожу, что пишу одинаковые URL-адреса в нескольких местах.
Django - использование обратного URL-адреса в настройках
Ответ 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/'
Ответ 2
В версии разработки django reverse_lazy() становится опцией: https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy