Ich habe mich gefragt, wie ich die aktuelle URL in einer Vorlage erhalten kann.
Angenommen, meine aktuelle URL lautet:
.../user/profile/
Wie kann ich dies an die Vorlage zurückgeben?
django
django-templates
dotty
quelle
quelle
request
einer Vorlage zu erhalten. In Django 1.10 greife ich einfach auf{{request.path}}
die Vorlage zu und es funktioniert. Standardmäßigdjango.core.context_processors.request
ist bereits in settings.py konfiguriert, wenn Siestartproject
Antworten:
Django 1.9 und höher:
Alt:
quelle
render_to_response
und nichtrender_to_request
. Und Sie können nichtTEMPLATE_CONTEXT_PROCESSORS
wie in settings.py definieren, ohne die anderen Standardprozessoren zu erwähnen, die möglicherweise in den Vorlagen verwendet werden!request.path
enthält keine Abfrageparameter wie?foo=bar
. Verwenden Sierequest.get_full_path
stattdessen.Sie können die URL in Ihrer Vorlage folgendermaßen abrufen:
oder von
{{ request.path }}
wenn Sie die zusätzlichen Parameter nicht benötigen.Einige Präzisionen und Korrekturen sollten zu den Antworten von Hypete und Igancio gebracht werden. Ich werde hier nur die gesamte Idee zusammenfassen, um später darauf zurückgreifen zu können.
Wenn Sie die
request
Variable in der Vorlage benötigen , müssen Sie denTEMPLATE_CONTEXT_PROCESSORS
Einstellungen die Datei 'django.core.context_processors.request' hinzufügen. Dies ist nicht standardmäßig (Django 1.4).Sie dürfen auch die anderen von Ihren Anwendungen verwendeten Kontextprozessoren nicht vergessen . Um die Anforderung zu den anderen Standardprozessoren hinzuzufügen, können Sie dies in Ihren Einstellungen hinzufügen, um zu vermeiden, dass die Standardprozessorliste fest codiert wird (dies kann sich in späteren Versionen sehr gut ändern):
Vorausgesetzt, Sie senden den
request
Inhalt Ihrer Antwort , zum Beispiel wie folgt:quelle
request
, sie dem Kontext hinzuzufügen .Note that a settings file should not import from global_settings, because that’s redundant
return render(request, 'user/profile.html', {'title': 'User profile'})
ist kürzer{{request.get_full_path|urlenode}}
Sie daran, Urlencode einzuschließen, dh wenn Sie umleitenDer folgende Code hilft mir:
quelle
In der Django-Vorlage Holen Sie sich
einfach die aktuelle URL von
{{request.path}}
Zum Abrufen der vollständigen URL mit Parametern
{{request.get_full_path}}
Hinweis : Sie müssen
request
in Django hinzufügenTEMPLATE_CONTEXT_PROCESSORS
quelle
Ich nehme an, die vollständige Anfrage zum Senden an die Vorlage ist etwas redundant. Ich mache es so
quelle
Die anderen Antworten waren zumindest in meinem Fall falsch.
request.path
liefert nicht die vollständige URL, sondern nur die relative URL, z/paper/53
. Ich habe keine richtige Lösung gefunden, daher habe ich den konstanten Teil der URL in der Ansicht fest codiert, bevor ich sie verkettet haberequest.path
.quelle
Beide
{{ request.path }} and {{ request.get_full_path }}
geben die aktuelle URL zurück, jedoch keine absolute URL, zum Beispiel:Also musst du so etwas tun
Sie können die absolute URL jedoch mithilfe von erhalten (dank der obigen Antwort).
Hinweis: Sie müssen nicht enthalten
request
insettings.py
da, es ist schon.quelle
Dies ist eine alte Frage, die sich jedoch genauso einfach zusammenfassen lässt, wenn Sie die Django-Registrierung verwenden.
Fügen Sie in Ihrem Link zum Anmelden und Abmelden (z. B. in Ihrem Seitenkopf) den nächsten Parameter zum Link hinzu, der zum Anmelden oder Abmelden führt. Ihr Link sollte so aussehen.
Das ist es einfach, nichts anderes muss getan werden. Nach dem Abmelden werden sie sofort auf die Seite umgeleitet, auf der sie sich befinden. Zum Anmelden füllen sie das Formular aus und es wird dann auf die Seite umgeleitet, auf der sie sich befanden. Auch wenn sie fälschlicherweise versuchen, sich anzumelden, funktioniert es immer noch.
quelle
{{ request.path|urlencode }}
Die obigen Antworten sind korrekt und geben eine gute und kurze Antwort.
Ich war auf der Suche auch die aktuellen Seite URL in Django Vorlage für immer als meine Absicht aktivieren sollte
HOME page
,MEMBERS page
,CONTACT page
,ALL POSTS page
wenn sie angefordert werden.Ich füge den Teil des HTML-Code-Snippets ein, den Sie unten sehen können, um die Verwendung von zu verstehen
request.path
. Sie können es in meinemlive website
unter http://pmtboyshostelraipur.pythonanywhere.com/ sehen.quelle
active
Klasse zu jedemli
Element hinzufügen möchten, warum nicht einfach inline innerhalb einesli
Elements:<li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
Anstelle eines riesigen if / else-Blocks für das Ganzeli
? Das würde eine ganze Menge redundanten Codes sparen :)In Django 3 möchten Sie das URL- Vorlagen-Tag verwenden:
Ein Beispiel finden Sie in der Dokumentation
quelle