Is it possible to pass query parameters via Django's {% url %} template tag?

DjangoDjango Templates

Django Problem Overview


I'd like to add request parameters to a {% url %} tag, like ?office=foobar.

Is this possible? I can't find anything on it.

Django Solutions


Solution 1 - Django

No, because the GET parameters are not part of the URL.

Simply add them to the end:

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

For Django 1.5+

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

Solution 2 - Django

A way to mix-up current parameters with new one:

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

Modify your settings to have request variable:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'django.core.context_processors.request',
)

Solution 3 - Django

Use urlencode if the argument is a variable

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

or else special characters like spaces might break your URL.

Documentation: https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#urlencode

Solution 4 - Django

First, a silly answer:

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

A serious anwser: No, you can't. Django's URL resolver matches only the path part of the URL, thus the {% url %} tag can only reverse that part of URL.

Solution 5 - Django

If your url (and the view) contains variable office then you can pass it like this:

{% url 'some-url-name' foobar %}

or like this, if you have more than one parameter:

{% url 'some-url-name' office='foobar' %}

Documentation: https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#url

Solution 6 - Django

Try this:

{% url 'myview' office=foobar %}

It worked for me. It basically does a reverse on that link and applies the given arguments.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBrian DView Question on Stackoverflow
Solution 1 - DjangoDaniel RosemanView Answer on Stackoverflow
Solution 2 - DjangoeriView Answer on Stackoverflow
Solution 3 - DjangoCiro Santilli Путлер Капут 六四事View Answer on Stackoverflow
Solution 4 - DjangolqcView Answer on Stackoverflow
Solution 5 - Djangopacifist_insideView Answer on Stackoverflow
Solution 6 - DjangoEdward CodarceaView Answer on Stackoverflow