Mi chiedevo come ottenere l'URL corrente all'interno di un modello.Come ottenere l'URL corrente all'interno di un modello Django?
Dire il mio URL è stato
/user/profile/
Come faccio a restituire questo al modello?
Mi chiedevo come ottenere l'URL corrente all'interno di un modello.Come ottenere l'URL corrente all'interno di un modello Django?
Dire il mio URL è stato
/user/profile/
Come faccio a restituire questo al modello?
Django 1.9 e superiori:
## template
{{ request.path }}
{{ request.get_full_path }}
Vecchio:
## settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
## views.py
from django.template import *
def home(request):
return render_to_response('home.html', {}, context_instance=RequestContext(request))
## template
{{ request.path }}
Un po 'laconico, e non corretto. È 'render_to_response', e non' render_to_request'. E non puoi definire 'TEMPLATE_CONTEXT_PROCESSORS' come fai in settings.py, senza menzionare gli altri processori predefiniti che potrebbero essere usati nei template! – RedGlyph
A partire dal 2016, non è più necessario aggiungere nulla a views.py. Finché django.core.context_processors.request viene caricato in TEMPLATE_CONTEXT_PROCESSORS - hai accesso a {{request.path}} dal modello. – Routhinator
'request.path' non include parametri di query come'? Foo = bar'. Usa invece 'request.get_full_path'. – Flimm
È possibile recuperare l'URL nel modello come questo:
<p>URL of this page: {{ request.get_full_path }}</p>
o
{{ request.path }}
se si Non hai bisogno dei parametri extra.
Alcune precisioni e correzioni devono essere inviate a hypete's e Igancio's risposte, mi limiterò a riassumere l'intera idea qui, per riferimento futuro.
Se è necessario la variabile request
nel modello, è necessario aggiungere il 'django.core.context_processors.request' per le impostazioni TEMPLATE_CONTEXT_PROCESSORS
, non è di default (Django 1.4).
È inoltre necessario Non dimenticare gli altri processori di contesto utilizzati dalle applicazioni. Così, per aggiungere la richiesta agli altri processori di default, è possibile aggiungere questo nelle impostazioni, per evitare hard-codifica la lista processore standard (che può benissimo cambiare nelle versioni successive):
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
)
Poi, a condizione si send the request
contents in your response, per esempio come questo:
from django.shortcuts import render_to_response
from django.template import RequestContext
def index(request):
return render_to_response(
'user/profile.html',
{ 'title': 'User profile' },
context_instance=RequestContext(request)
)
Ho utilizzato una vista di classe generica estesa e non è stato necessario aggiungere 'request' al contesto. – Bobort
Decisamente più pulito per evitare la codifica hard dell'elenco TCP, ma docs.djangoproject.com/en/dev/topics/settings/#default-settings dice: 'Nota che un file di impostazioni non deve importare da global_settings, perché è ridondante' – Medorator
'return render (request, 'user/profile.html', {'title': 'Profilo utente'})' è più corto –
questa è una vecchia questione, ma può essere riassunta così facilmente come questo se si sta utilizzando django-registrazione.
Nel collegamento di accesso e disconnessione (diciamo nell'intestazione della pagina) aggiungere il prossimo parametro al collegamento che andrà ad accedere o uscire. Il tuo link dovrebbe assomigliare a questo.
<li><a href="http://www.noobmovies.com/accounts/login/?next={{ request.path | urlencode }}">Log In</a></li>
<li><a href="http://www.noobmovies.com/accounts/logout/?next={{ request.path | urlencode }}">Log Out</a></li>
che è semplicemente, niente altro deve essere fatto, su di disconnessione saranno immediatamente reindirizzati alla pagina sono a, per log in, saranno compilate il modulo e sarà quindi reindirizzare alla pagina che erano su Anche se provano erroneamente ad accedere, funziona ancora.
dovresti codificare il percorso se si trova in un url: '{{request.path | urlencode}}' – Quentin
Nel modello di Django
ottenere semplicemente URL corrente dal {{request.path}}
Per ottenere URL completo con i parametri {{request.get_full_path}}
Nota: È necessario aggiungere request
in Django TEMPLATE_CONTEXT_PROCESSORS
suppongo inviare al modello completo la richiesta è un po 'ridondante. Lo faccio in questo modo
def home(request):
app_url = request.path
return render(request, 'home.html', {'app_url': app_url})
##template
{{ app_url }}
Le altre risposte non erano corrette, almeno nel mio caso. request.path
non fornisce l'url completo, ma solo l'url relativo, ad es. /paper/53
. Non ho trovato alcuna soluzione adeguata, quindi ho finito per codificare la parte costante dell'URL nella vista prima di concatenarlo con request.path
.
Guarda la data. Le risposte sono state fornite 6 o 7 anni fa. – dotty
Le risposte sopra riportate sono corrette e danno una risposta grande e breve.
Sono stato anche alla ricerca di ottenere l'URL della pagina corrente nel modello di Django come la mia intenzione era quella di attivare HOME page
, MEMBERS page
, CONTACT page
, ALL POSTS page
quando vengono richiesti.
Sto incollando la parte dello snippet di codice HTML che potete vedere qui sotto per capire l'uso di request.path
. Lo si può vedere nel mio live website
a http://pmtboyshostelraipur.pythonanywhere.com/
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<!--HOME-->
{% if "/" == request.path %}
<li class="active text-center">
<a href="/" data-toggle="tooltip" title="Home" data-placement="bottom">
<i class="fa fa-home" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true">
</i>
</a>
</li>
{% else %}
<li class="text-center">
<a href="/" data-toggle="tooltip" title="Home" data-placement="bottom">
<i class="fa fa-home" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true">
</i>
</a>
</li>
{% endif %}
<!--MEMBERS-->
{% if "/members/" == request.path %}
<li class="active text-center">
<a href="/members/" data-toggle="tooltip" title="Members" data-placement="bottom">
<i class="fa fa-users" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a href="/members/" data-toggle="tooltip" title="Members" data-placement="bottom">
<i class="fa fa-users" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
<!--CONTACT-->
{% if "/contact/" == request.path %}
<li class="active text-center">
<a class="nav-link" href="/contact/" data-toggle="tooltip" title="Contact" data-placement="bottom">
<i class="fa fa-volume-control-phone" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a class="nav-link" href="/contact/" data-toggle="tooltip" title="Contact" data-placement="bottom">
<i class="fa fa-volume-control-phone" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
<!--ALL POSTS-->
{% if "/posts/" == request.path %}
<li class="text-center">
<a class="nav-link" href="/posts/" data-toggle="tooltip" title="All posts" data-placement="bottom">
<i class="fa fa-folder-open" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a class="nav-link" href="/posts/" data-toggle="tooltip" title="All posts" data-placement="bottom">
<i class="fa fa-folder-open" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
</ul>
possibile duplicato del [percorso di lettura nei template] (http://stackoverflow.com/questions/2127937/reading-path-in-templates) –
Tutte le risposte sottostanti mi hanno fatto pensare che avevo bisogno di fare qualche ginnastica per avere accesso a 'request' in un template. In Django 1.10 accedo semplicemente a '{{request.path}}' nel template e funziona. Di default 'django.core.context_processors.request' è già configurato in settings.py se hai usato' startproject' – User