Take the 2-minute tour ×

This is simple and obvious but I can't get it right:

I have the following view function declared in urls.py

 (r'^v1/(\d+)$', r'custom1.views.v1'),

originally I was passing a single parameter to the view function v1. I want to modify it to pass 2 parameters. How do I declare the entry in urls.py to take two parameters?

share|improve this question

3 Answers 3

up vote 2 down vote accepted

I believe each group in the regex is passed as a parameter (and you can name them if you want):

(r'^v1/(\d+)/(\d+)/$', r'custom1.views.v1')

Check out the examples at: https://docs.djangoproject.com/en/dev/topics/http/urls/. You can also name your groups.

share|improve this answer

Supposing you want the URL to look like v1/17/18 and obtain the two parameters 17 and 18, you can just declare the pattern as:

(r'^v1/(\d+)/(\d+)$', r'custom1.views.v1'),

Make sure v1 accepts two arguments in addition to the request object:

def v1 ( request, a, b ):
    # for URL 'v1/17/18', a == '17' and b == '18'.

The first example in the documentation about the URL dispatcher contains several patterns, the last of which take 2 and 3 parameters.

share|improve this answer

Somewhere along the line I got in the habit of naming them directly in the regex, although honestly I don't know if it makes a difference.

(r'^v1/(?P<variable_a>(\d+))/(?P<variable_b>(\d+))/$', r'custom1.views.v1')

def v1(request, variable_a, variable_b):

Also, it's very Django to end the url with a trailing slash - Django Design Philosophy, FYI

share|improve this answer

Your Answer


