web-dev-qa-db-fra.com

Est-il possible de transmettre des paramètres de requête via la balise de template {Djol} de Django?

J'aimerais ajouter des paramètres de requête à une balise {% url %}, Comme ?office=foobar.

Est-ce possible? Je ne trouve rien dessus.

107
Brian D

Non, car les paramètres GET ne font pas partie de l'URL.

Ajoutez-les simplement à la fin:

<a href="{% url myview %}?office=foobar">

Pour Django 1.5+

<a href="{% url 'myview' %}?office=foobar">
153
Daniel Roseman

Une façon de mélanger les paramètres actuels avec les nouveaux:

{% url 'order_list' %}?office=foobar&{{ request.GET.urlencode }}

Modifiez vos paramètres pour avoir une variable de requête:

from Django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'Django.core.context_processors.request',
)
30
eri

Utilisez urlencode si l'argument est une variable

<a href="{% url 'myview' %}?office={{ some_var | urlencode }}">

ou bien des caractères spéciaux tels que des espaces peuvent casser votre URL.

La documentation de url ne mentionne pas de méthode utilisant url directement: https://docs.djangoproject.com/fr/1.9/ref/templates/builtins/#url =

Tout d'abord, une réponse idiote:

{% url my-view-name %}?office=foobar

Une réponse sérieuse: Non, vous ne pouvez pas. Le résolveur d'URL de Django correspond uniquement à la partie chemin de l'URL. Par conséquent, la balise {% url %} Ne peut que renverser cette partie de l'URL.

8
lqc

Essaye ça:

{% url 'myview' office=foobar %}

Cela a fonctionné pour moi. Fondamentalement, il fait l'inverse sur ce lien et applique les arguments donnés.

0
Edward Codarcea