6

I have a view that looks like this:

def selectCity(request, the_city):
    request.session["ciudad"] = the_city
    city = request.session["ciudad"]
    return HttpResponse('Ciudad has been set' + ": " + city)

And a URL that looks like this:

url(r'^set/$', views.selectCity, {'the_city': 'gye'}, name='ciudad'),

Now when I visit /set/ I get the appropriate response with the session variable set from the value on the dict in the url {'the_city': 'gye'}

Now, what I would like to do is modify my program so that I can call the 'ciudad' url from a different template (index.html) and set the appropriate session variable. So I would call it using reverse URL matching with an additional argument doing something like this:

  <div class="modal-body">
      <a tabindex="-1" href="{% url ciudad 'the_city':'uio' %}">Quito</a>
      <br/>
      <a tabindex="-1" href="{% url ciudad 'the_city':'gye' %}">Guayaquil</a>
  </div>

I have tried to modify the url and the views and the reverse url call in various ways to try to get this to work but, I can't seem to figure it out. I would really appreciate some pointers.

2 Answers 2

14

You can pass the relevant arguments in url tag, if your url (in urls.py) has any capturing group.

url(r'^set/(?P<the_city>\w+)/$', views.selectCity, {'the_city': 'gye'}, name='ciudad'),

Then in template:

<a tabindex="-1" href="{% url ciudad the_city='gye' %}">Guayaquil</a>
Sign up to request clarification or add additional context in comments.

2 Comments

Yup, this is perfect,thanks! A quick question, what does that \w+ part or the regular expression do?
Please see here, \w+ means it matches any alphanumeric character and the underscore; this is equivalent to the set [a-zA-Z0-9_]
1

Check out captured parameters. Something like this might work:

url(r'^set/$', views.selectCity, {'the_city': 'gye'}, name='ciudad'),
url(r'^set/(?P<the_city>\w+)/$', views.selectCity, name='ciudad'),

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.