2009-10-05 8 views
35

Kilka opcji w pliku ustawień django to adresy URL, na przykład LOGIN_URL i LOGIN_REDIRECT_URL. Czy możliwe jest uniknięcie kodowania tych URL-i, zamiast tego użyj odwrotnego adresu URL? W tej chwili jest to jedyne miejsce, w którym zapisuję te same adresy w wielu miejscach.Django - użyj odwrotnego adresu URL w ustawieniach

+2

Wątpię, ponieważ 'settings.py' jest ładowany przed modułem URL. Chciałbym się jednak dowiedzieć. Świetne pytanie. –

Odpowiedz

48

Django 1.5 i później

Jak Django 1.5, LOGIN_URL i LOGIN_REDIRECT_URL akceptują nazwane wzorców URL. Oznacza to, że nie musisz kodować żadnych adresów URL w swoich ustawieniach.

LOGIN_URL = 'login' # name of url pattern 

Dla Django 1.5 - 1.9, można również użyć widoku nazwy funkcji, ale nie jest to zalecane, ponieważ jest przestarzałe w Django 1.8 i nie będzie działać w Django 1.10+.

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

Django 1.4

Dla Django 1.4, można przydałby reverse_lazy

LOGIN_URL = reverse_lazy('login') 

Django 1.3 i wcześniej

Jest to oryginalna odpowiedź, która pracowała przed reverse_lazy został dodany do Django

W adresie URL s.py ustawienia importu:

from django.conf import settings 

następnie dodać wzorzec URL

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

Pamiętaj, że musisz pokroić LOGIN_URL usunąć wiodący ukośnik.

W powłoce:

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

Ach, dobre rozwiązanie, nie rozważałem przechodzenia z ustawień -> adresów URL, tylko na odwrót. +1 –

+0

Czy możesz uniknąć twardego kodowania katalogu głównego django, aby/accounts/login zmieniło się na/root/accounts/login, jeśli twoja aplikacja django jest wdrożona na example.com/root zamiast example.com/? – gozzilli

+0

@gozzilli - od Django 1.4, użyłbym 'reverse_lazy' zamiast importować' settings.LOGIN_URL' do adresów URL. Zaktualizowałem odpowiedź. – Alasdair

Powiązane problemy