add request.GET variable using django.shortcuts.redirect

Viewed 31152

Is possible to add GET variables in a redirect ? (Without having to modifiy my urls.py)

If I do redirect('url-name', x)

I get HttpResponseRedirect('/my_long_url/%s/', x)

I don't have complains using HttpResponseRedirect('/my_long_url/%s/?q=something', x) instead, but just wondering...

4 Answers

We can import urlencode from django.

from django.utils.http import urlencode

get_args_str = urlencode({'q': 'something'})

Or we can just use unparsed get parameters string from starting request

get_args_str = request.META['QUERY_STRING']

HttpResponseRedirect('%s?%s' % (url, get_args_str))

I think it's worth noting that Django's RedirectView class has a built-in class attribute query_string which can be overridden or passed to as_view. If set to True, query_string will preserve the query string in the redirect. For example, you could put the following in urls.py:

path('example-redirect/',
     RedirectView.as_view(url='https://example.com', query_string=True),
     name='example_redirect')
Related