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
Odpowiedz
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/'
Ach, dobre rozwiązanie, nie rozważałem przechodzenia z ustawień -> adresów URL, tylko na odwrót. +1 –
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
@gozzilli - od Django 1.4, użyłbym 'reverse_lazy' zamiast importować' settings.LOGIN_URL' do adresów URL. Zaktualizowałem odpowiedź. – Alasdair
w Django wersja rozwojowa reverse_lazy() staje się opcja: https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy
+1 dzięki za heads up! –
Zaplanowano wydanie 1.4 w marcu 2012 r. –
Oto fragment kodu dla wcześniejszych wersji: http://djangosnippets.org/snippets/499/ –
- 1. Przekierowanie adresu URL Django
- 2. Django: uzyskiwanie poprzedniego adresu URL
- 3. użyj .htaccess do przyjaznego adresu URL
- 4. Django nie może znaleźć wzorca adresu URL
- 5. Szablony Django: Porównanie bieżącego adresu URL z {% url xyz%}
- 6. Znajdowanie adresu URL LDAP?
- 7. Użyj JQuery preventDefault(), ale nadal dodawaj ścieżkę do adresu URL
- 8. Użyj niestandardowego adresu URL z Share Share plusem społecznościowym
- 9. Czy mogę przekierować do innego adresu URL w django TemplateView?
- 10. Przypisywanie wartości nazwanego adresu URL do zmiennej w szablonach Django
- 11. Używanie znacznika adresu URL Django w połączeniu AJAX
- 12. Jak uzyskać nazwę serwera w Django dla pełnego adresu URL?
- 13. Wyłącz buforowanie dla widoku lub adresu URL w django
- 14. Jak cofnąć nazwę do bezwzględnego adresu URL w szablonie django?
- 15. Jak używać liczby dziesiętnej w wzorcu adresu URL Django?
- 16. DJANGO: Jak wyświetlić_podpis odwrotnego atrybutu klucza obcego?
- 17. Użyj pozornej lokalizacji bez ustawiania jej w ustawieniach
- 18. zmienne środowiskowe Użyj systemu Windows w ustawieniach Sublime pliki tekstowe
- 19. Obsługa adresu URL RESTful URL
- 20. Jak zrobić odwrotnego wyszukiwania adresów URL w Django przestrzeni nazw wielokrotnego stosowania
- 21. Dekodowanie adresu URL w języku Python?
- 22. ostrzeżenia django-selera o ustawieniach. DEBUG
- 23. Django: Wydrukuj URL zdjęcia bez kodowania na sztywno adresu URL Url
- 24. Django: Uzyskiwanie bezwzględnego adresu URL bez dostępu do obiektu żądania
- 25. django-cms nie prowadzi poprawnie do statycznego adresu URL?
- 26. Pamięć podręczna widoku django, który ma parametry adresu URL
- 27. Dostosowywanie adresu URL w AddThis
- 28. Wicket: Względem bezwzględnego adresu URL lub adresu URL bazy
- 29. Uzyskiwanie pełnego adresu URL z adresu URL znakiem tyldy (~)
- 30. Szykuje jak zażądać adresu URL z wyjątkiem parametrów adresu URL?
Wątpię, ponieważ 'settings.py' jest ładowany przed modułem URL. Chciałbym się jednak dowiedzieć. Świetne pytanie. –