67 votes

Django: récupère l'URL de la page en cours, y compris les paramètres, dans un modèle

Est-il possible d'obtenir l'URL de la page actuelle et tous ses paramètres dans un modèle Django?

Par exemple, une étiquette de modèle imprimant une URL complète telle que /foo/bar?param=1&baz=2

77voto

sdolan Points 15572

Écrire un contexte personnalisé processeur. par exemple

def get_current_path(request):
    return {
       'current_path': request.get_full_path()
     }

ajouter un chemin d'accès à cette fonction dans votre TEMPLATE_CONTEXT_PROCESSORS paramètres de la variable, et à utiliser dans votre modèle comme suit:

{{ current_path }}

Si vous voulez avoir le plein request objet dans chaque requête, vous pouvez utiliser le haut- django.core.context_processors.request contexte du processeur, et ensuite utiliser {{ request.get_full_path }} dans votre modèle.

Voir:

27voto

Secator Points 9827

Utilisez le processeur de contexte de compilation de Django pour obtenir la demande dans un contexte de modèle. Dans les paramètres, ajoutez request processeur à TEMPLATE_CONTEXT_PROCESSORS

 TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here

    'django.core.context_processors.request',
)
 

Et en utilisation de template:

 {{ request.get_full_path }}
 

De cette façon, vous n'avez pas besoin d'écrire de nouveau code par vous-même.

9voto

eruciform Points 5176

Dans un fichier context_processors.py (ou similaire):

 def myurl( request ):
  return { 'myurlx': request.get_full_path() }
 

Dans settings.py:

 TEMPLATE_CONTEXT_PROCESSORS = (
  ...
  wherever_it_is.context_processors.myurl,
  ...
 

Dans votre template.html:

 myurl={{myurlx}}
 

2voto

Rafael Lopes Points 43

Django a beaucoup de choses, mais si vous n'avez pas explicite ce que vous voulez à utiliser, il ne sera pas utilisé.

Ainsi, dans MTV schéma (Modèle, le Modèle, la vue reçoit une demande et utilise un modèle de rendu de générer une réponse, en passant sur un dictionnaire ou toutes les variables locales (à l'aide de la population locale() function) de ce point de vue. Sachant cela, nous pouvons insérer l'url courante, qui est venu de la réponse, comme ceci:

views.py:

from django.shortcuts import render

def page(request):
    currentUrl = request.get_full_path()
    return render(request, 'app/page.html', locals())

Ensuite, dans le modèle "app/page.html' vous avez juste à faire ce qui suit pour afficher le currentUrl variable que nous venons de créer et traversé par les habitants():

app/template/page.html:

{{ currentUrl }}

2voto

oblalex Points 221

Dans addtition à sdolan de réponse:

si vous utilisez l'I18N et souhaite transmettre next valeur /i18n/setlang/ pour changer la langue de la page en cours, alors vous aurez besoin d'enlever actuel code de langue à partir du chemin d'accès complet ce soit. Quelque chose comme:

full_path = request.get_full_path()
current_path = full_path[full_path.index('/', 1):]

Cela suppose que chaque chemin a format /LANG_CODE/any/other/stuff/with/?param='yay' et simplement débute LANG_CODE quel qu'il soit (par exemple, /en/ seront /).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X