Je me demandais comment obtenir l'URL actuelle dans un modèle.
Supposons que mon URL actuelle soit:
.../user/profile/
Comment puis-je retourner cela au modèle?
django
django-templates
dingue
la source
la source
request
un modèle. Dans Django 1.10, j'accède simplement{{request.path}}
au modèle et cela fonctionne. Par défaut, ildjango.core.context_processors.request
est déjà configuré dans settings.py si vous l'avez utiliséstartproject
Réponses:
Django 1.9 et supérieur:
Vieux:
la source
render_to_response
et nonrender_to_request
. Et vous ne pouvez pas définirTEMPLATE_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 modèles!request.path
n'inclut pas les paramètres de requête comme?foo=bar
. Utilisezrequest.get_full_path
plutôt.Vous pouvez récupérer l'URL dans votre modèle comme ceci:
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 d' Hypete et d' Igancio , je résumerai simplement l'idée ici, pour référence future.
Si vous avez besoin de la
request
variable dans le modèle, vous devez ajouter le 'django.core.context_processors.request' auxTEMPLATE_CONTEXT_PROCESSORS
paramètres, ce n'est pas par défaut (Django 1.4).Vous ne devez pas non plus oublier les autres processeurs de contexte utilisés par vos applications. Donc, pour ajouter la demande aux autres processeurs par défaut, vous pouvez l'ajouter dans vos paramètres, pour éviter de coder en dur la liste des processeurs par défaut (qui pourrait très bien changer dans les versions ultérieures):
Ensuite, à condition d' envoyer le
request
contenu dans votre réponse , par exemple comme ceci:la source
request
au contexte.Note that a settings file should not import from global_settings, because that’s redundant
return render(request, 'user/profile.html', {'title': 'User profile'})
est plus court{{request.get_full_path|urlenode}}
- dire si vous redirigezLe code ci-dessous m'aide:
la source
Dans le modèle django Obtenez
simplement l'url actuelle de
{{request.path}}
Pour obtenir l'url complète avec les paramètres
{{request.get_full_path}}
Remarque : vous devez ajouter
request
dans djangoTEMPLATE_CONTEXT_PROCESSORS
la source
Je suppose que l'envoi au modèle de demande complète est un peu redondant. Je le fais de cette façon
la source
Les autres réponses étaient incorrectes, du moins dans mon cas.
request.path
ne fournit pas l'URL complète, seulement l'URL relative, par exemple/paper/53
. Je n'ai trouvé aucune solution appropriée, j'ai donc fini par coder en dur la partie constante de l'URL dans la vue avant de la concaténerrequest.path
.la source
Les deux
{{ request.path }} and {{ request.get_full_path }}
renvoient l'URL actuelle mais pas l'URL absolue, par exemple:Vous devrez donc faire quelque chose comme
Cependant, vous pouvez obtenir l'URL absolue en utilisant (grâce à la réponse ci-dessus)
REMARQUE: vous ne devez pas inclure
request
danssettings.py
, il est déjà là.la source
C'est une vieille question mais elle peut être résumée aussi facilement que celle-ci si vous utilisez django-registration.
Dans votre lien de connexion et de déconnexion (disons dans l'en-tête de votre page), ajoutez le paramètre suivant au lien qui ira à la connexion ou à la déconnexion. Votre lien devrait ressembler à ceci.
C'est tout, rien d'autre ne doit être fait, à la déconnexion, ils seront immédiatement redirigés vers la page où ils se trouvent, pour se connecter, ils rempliront le formulaire et il redirigera ensuite vers la page sur laquelle ils se trouvaient. Même s'ils essaient incorrectement de se connecter, cela fonctionne toujours.
la source
{{ request.path|urlencode }}
Les réponses ci-dessus sont correctes et elles donnent une bonne et courte réponse.
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
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 monlive website
à http://pmtboyshostelraipur.pythonanywhere.com/la source
active
classe à chaqueli
élément, pourquoi ne pas simplement le faire en ligne dans unli
élément:<li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
au lieu d'un bloc if / else géant pour l'ensembleli
? Cela sauverait tout un tas de code redondant :)Dans Django 3, vous souhaitez utiliser la balise de modèle d' URL :
Pour un exemple, voir la documentation
la source