Je me demandais comment obtenir l'URL actuelle dans un modèle.
Dites que mon URL actuelle est:
.../user/profile/
Comment puis-je renvoyer ceci au modèle?
Django 1.9 et supérieur:
## template
{{ request.path }} # -without GET parameters
{{ request.get_full_path }} # - with GET parameters
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 }}
Vous pouvez récupérer l'URL dans votre modèle comme ceci:
_<p>URL of this page: {{ request.get_full_path }}</p>
_
ou par
_{{ request.path }}
_ si vous n'avez pas besoin des paramètres supplémentaires.
Quelques précisions et corrections devraient être apportées aux réponses hypete et Igancio , je vais simplement résumer toute 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' au TEMPLATE_CONTEXT_PROCESSORS
paramètres, ce n'est pas par défaut (Django 1.4).
Vous devez également 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 ceci dans vos paramètres, pour éviter de coder en dur la liste des processeurs par défaut (cela pourrait 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 que vous envoyez le contenu de request
dans votre réponse , 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)
)
_
Je suppose que la demande complète d'envoi au modèle 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 }}
Dans le modèle Django
Il suffit d’obtenir l’URL actuelle de {{request.path}}
Pour obtenir une URL complète avec les paramètres {{request.get_full_path}}
Note: Vous devez ajouter request
dans Django TEMPLATE_CONTEXT_PROCESSORS
Les autres réponses étaient incorrectes, du moins dans mon cas. request.path
ne fournit pas l'URL complète, mais uniquement l'URL relative, par ex. /paper/53
. Je n'ai pas trouvé de solution appropriée, j'ai donc fini par coder en dur la partie constante de l'URL dans la vue avant de la concaténer avec request.path
.
C'est une vieille question, mais elle peut être résumée aussi facilement si vous utilisez l'enregistrement Django.
Dans votre lien de connexion et déconnexion (ajoutons dans l'en-tête de votre page), ajoutez le paramètre suivant au lien qui vous permettra de vous connecter ou de vous 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>
C’est tout simplement, il n’ya rien d’autre à faire. À la fermeture de session, ils seront immédiatement redirigés vers la page où ils se trouvent. Pour se connecter, ils rempliront le formulaire, qui sera redirigé vers la page sur laquelle ils étaient. Même s'ils essaient de se connecter incorrectement, cela fonctionne toujours.
Les réponses ci-dessus sont correctes et donnent une réponse large et succincte.
Je cherchais également à obtenir l'URL de la page actuelle dans le modèle Django, car mon intention était d'activer HOME page
, MEMBERS page
, CONTACT page
, ALL POSTS page
quand 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
à l'adresse 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>