Django - использовать обратное отображение URL в настройках - PullRequest
38 голосов
/ 05 октября 2009

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

Ответы [ 2 ]

53 голосов
/ 05 октября 2009

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

Джанго 1,4

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

LOGIN_URL = reverse_lazy('login')

Джанго 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/'
13 голосов
/ 09 января 2012

В версии для разработки django reverse_lazy () становится опцией: https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy

...