Je me demandais comment obtenir l'URL actuelle dans un modèle.Comment obtenir l'URL actuelle dans un template Django?
Dis mon URL était
/user/profile/
Comment puis-je retourner ce au modèle?
Je me demandais comment obtenir l'URL actuelle dans un modèle.Comment obtenir l'URL actuelle dans un template Django?
Dis mon URL était
/user/profile/
Comment puis-je retourner ce au modèle?
Django 1.9 et au-dessus:
## template
{{ request.path }}
{{ request.get_full_path }}
Vieux:
## 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 peu laconique, et pas correct. C'est 'render_to_response', et non' render_to_request'. Et vous ne pouvez pas définir 'TEMPLATE_CONTEXT_PROCESSORS' comme vous le faites dans settings.py, sans mentionner les autres processeurs par défaut qui pourraient bien être utilisés dans les templates! – RedGlyph
Depuis 2016, vous n'avez plus besoin d'ajouter quoi que ce soit à views.py. Tant que django.core.context_processors.request est chargé dans TEMPLATE_CONTEXT_PROCESSORS - vous avez accès à {{request.path}} à partir du modèle. – Routhinator
'request.path' n'inclut pas les paramètres de requête tels que'? Foo = bar'. Utilisez 'request.get_full_path' à la place. – Flimm
Vous pouvez chercher l'URL dans votre modèle comme celui-ci:
<p>URL of this page: {{ request.get_full_path }}</p>
ou par
{{ request.path }}
si y Vous n'avez pas besoin des paramètres supplémentaires.
Certaines précisions et corrections doivent être apportées à hypete's et Igancio's réponses, je vais résumer l'idée ici, pour référence future.
Si vous avez besoin de la variable request
dans le modèle, vous devez ajouter le « django.core.context_processors.request » aux TEMPLATE_CONTEXT_PROCESSORS
paramètres, ce n'est pas par défaut (Django 1.4).
Vous devez également de ne pas oublier les autres processeurs de contexte utilisés par vos applications. Donc, pour ajouter la demande aux autres processeurs par défaut, vous pouvez ajouter dans vos paramètres, afin d'éviter coder en dur la liste des processeurs par défaut (qui peut très bien changer dans les versions ultérieures):
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
)
Ensuite, à condition vous send the request
contents in your response, par exemple comme ceci:
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)
)
J'ai utilisé une vue de classe générique étendue, et il n'était pas nécessaire d'ajouter 'request' au contexte. – Bobort
Nettement plus propre à éviter de coder en dur la liste TCP, mais docs.djangoproject.com/fr/dev/topics/settings/#default-settings dit: 'Notez qu'un fichier de paramètres ne doit pas être importé depuis global_settings, parce que c'est redondant' – Medorator
'return render (request, 'utilisateur/profile.html', {'title': 'Profil utilisateur'})' est plus court –
C'est une vieille question, mais il peut se résumer aussi facilement que si vous utilisez django-inscription.
Dans votre lien Connexion et déconnexion (disons dans l'en-tête de votre page), ajoutez le paramètre suivant au lien qui va se connecter ou se déconnecter. Votre lien devrait ressembler à ceci.
<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>
qui est tout simplement, rien d'autre a besoin d'être fait, lors de la déconnexion, ils seront immédiatement redirigés vers la page qu'ils sont à, pour journal, ils rempliront le formulaire et il sera alors redirigé vers la page qu'ils étaient allumés. Même s'ils tentent incorrectement de se connecter, cela fonctionne toujours.
vous devriez encoder le chemin s'il est dans un URL: '{{request.path | urlencode}}' – Quentin
dans le modèle de django
obtenir simplement l'URL actuelle de {{request.path}}
Pour obtenir url complète avec les paramètres {{request.get_full_path}}
Remarque: Vous devez ajouter request
dans django TEMPLATE_CONTEXT_PROCESSORS
Je suppose envoyer à Modèle complet La requête est un peu redondante. Je le fais de cette façon
def home(request):
app_url = request.path
return render(request, 'home.html', {'app_url': app_url})
##template
{{ app_url }}
Les autres réponses étaient incorrectes, au moins dans mon cas. request.path
ne fournit pas l'URL complète, seulement l'URL relative, par ex. /paper/53
. Je n'ai pas trouvé de solution appropriée, donc j'ai fini par coder en dur la partie constante de l'URL dans la vue avant de la concaténer avec request.path
.
Regardez la date. Les réponses ont été données il y a 6 ou 7 ans. – dotty
Les réponses ci-dessus sont correctes et donnent une réponse rapide.
Je cherchais aussi pour obtenir l'URL de la page en cours dans le modèle Django que mon intention était d'activer HOME page
, MEMBERS page
, CONTACT page
, ALL POSTS page
lorsqu'ils sont demandés.
Je colle la partie de l'extrait de code HTML que vous pouvez voir ci-dessous pour comprendre l'utilisation de request.path
. Vous pouvez le voir dans mon live website
à 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>
double possible de [chemin lecture dans les modèles] (http://stackoverflow.com/questions/2127937/reading-path-in-templates) –
Toutes les réponses ci-dessous m'ont fait penser que je devais faire de la gymnastique pour avoir accès à 'request' dans un template. Dans Django 1.10, j'accède juste '{{request.path}}' dans le template et ça marche. Par défaut 'django.core.context_processors.request' est déjà configuré dans settings.py si vous avez utilisé' startproject' – User