Including a querystring in a django.core.urlresolvers reverse() call

Brian Hicks picture Brian Hicks · Feb 14, 2011 · Viewed 26k times · Source

I'm trying to reverse a named URL and include a querystring in it. Basically, I've modified the login function, and I want to send ?next= in it.

Here's what I'm doing now: reverse(name) + "?next=" + reverse(redirect)

Here's what I'd like to do: reverse(name, kwargs = { 'next':reverse(redirect) } )

My URL for the login page (just as an example) looks like this:

url(r'^login/', custom_login, name = 'login'),

So how do I modify this whole thing (or call it) to include the next without having to concatenate it? It feels like an iffy solution at best.

Answer

Yuji 'Tomita' Tomita picture Yuji 'Tomita' Tomita · Feb 14, 2011

You can't capture GET parameters in the url confs, so your method is correct.

I generally prefer string formatting but it's the same thing.
"%s?next=%s" % (reverse(name), reverse(redirect))

http://docs.djangoproject.com/en/dev/topics/http/urls/#what-the-urlconf-searches-against

The URLconf searches against the requested URL, as a normal Python string. This does not include GET or POST parameters, or the domain name.