Zastanawiałem się, jak uzyskać bieżący adres URL w szablonie.
Powiedz, że mój obecny adres URL to:
.../user/profile/
Jak mogę to zwrócić do szablonu?
django
django-templates
rozsiany
źródło
źródło
request
szablonu. W Django 1.10 po prostu uzyskuję dostęp{{request.path}}
do szablonu i działa. Domyślniedjango.core.context_processors.request
jest już skonfigurowany w settings.py, jeśli go użyłeśstartproject
Odpowiedzi:
Django 1.9 i nowszy:
Stary:
źródło
render_to_response
i nierender_to_request
. I nie możesz zdefiniować,TEMPLATE_CONTEXT_PROCESSORS
jak to robisz w settings.py, nie wspominając o innych domyślnych procesorach, które mogą być dobrze wykorzystane w szablonach!request.path
nie obejmuje parametrów zapytania takich jak?foo=bar
. Użyjrequest.get_full_path
zamiast tego.Możesz pobrać adres URL z szablonu w następujący sposób:
lub przez
{{ request.path }}
jeśli nie potrzebujesz dodatkowych parametrów.Należy uściślić pewne szczegóły i poprawki w odpowiedziach hypete'a i Igancio. Po prostu streszczę tutaj cały pomysł, do przyszłego wykorzystania.
Jeśli potrzebujesz
request
zmiennej w szablonie, musisz dodać „django.core.context_processors.request” doTEMPLATE_CONTEXT_PROCESSORS
ustawień, nie jest to domyślnie (Django 1.4).Nie wolno również zapominać o innych procesorach kontekstowych używanych przez aplikacje. Tak więc, aby dodać żądanie do innych domyślnych procesorów, możesz dodać to w swoich ustawieniach, aby uniknąć zakodowania na stałe domyślnej listy procesorów (co może się bardzo zmienić w późniejszych wersjach):
Następnie pod warunkiem przesłania
request
treści w odpowiedzi , na przykład w następujący sposób:źródło
request
do kontekstu.Note that a settings file should not import from global_settings, because that’s redundant
return render(request, 'user/profile.html', {'title': 'User profile'})
jest krótszy{{request.get_full_path|urlenode}}
jeśli przekierowujeszPoniższy kod pomaga mi:
źródło
W szablonie django
Po prostu pobierz aktualny adres URL
{{request.path}}
Aby uzyskać pełny adres URL z parametrami
{{request.get_full_path}}
Uwaga : Musisz dodać
request
w djangoTEMPLATE_CONTEXT_PROCESSORS
źródło
Przypuszczam, że pełne przesłanie żądania do szablonu jest trochę zbędne. Robię to w ten sposób
źródło
Pozostałe odpowiedzi były niepoprawne, przynajmniej w moim przypadku.
request.path
nie podaje pełnego adresu URL, tylko względny adres URL, np/paper/53
. Nie znalazłem żadnego właściwego rozwiązania, więc ostatecznie skonkodowałem stałą część adresu URL w widoku przed połączeniem gorequest.path
.źródło
Oba
{{ request.path }} and {{ request.get_full_path }}
zwracają bieżący adres URL, ale nie bezwzględny adres URL, na przykład:Więc musisz zrobić coś takiego
Możesz jednak uzyskać bezwzględny adres URL za pomocą (dzięki powyższej odpowiedzi)
UWAGA: nie trzeba włączyć
request
wsettings.py
, to już tam jest.źródło
To stare pytanie, ale można je tak łatwo podsumować, jeśli używasz rejestracji django.
W swoim linku Zaloguj się i Wyloguj (powiedzmy w nagłówku strony) dodaj następny parametr do linku, który przejdzie do logowania lub wylogowania. Twój link powinien wyglądać następująco.
Po prostu nic więcej nie trzeba robić, po wylogowaniu zostaną natychmiast przekierowani na stronę, na której się znajdują, aby się zalogować, wypełnią formularz, a następnie przekierują na stronę, na której byli. Nawet jeśli nieprawidłowo spróbują się zalogować, nadal działa.
źródło
{{ request.path|urlencode }}
Powyższe odpowiedzi są poprawne i dają świetną i krótką odpowiedź.
Ja również poszukuje coraz URL bieżącej strony w szablonie Django jako moją intencją było, aby uaktywnić
HOME page
,MEMBERS page
,CONTACT page
,ALL POSTS page
gdy są one wymagane.Wklejam fragment fragmentu kodu HTML, który możesz zobaczyć poniżej, aby zrozumieć jego użycie
request.path
. Możesz to zobaczyć w moimlive website
na http://pmtboyshostelraipur.pythonanywhere.com/źródło
active
klasę do każdegoli
elementu, dlaczego po prostu nie zrobić tego w jednymli
elemencie:<li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
zamiast gigantycznego bloku if / else dla całościli
?W Django 3 chcesz użyć tagu szablonu adresu URL :
Na przykład zobacz dokumentację
źródło