52

Assuming I have a 'get_item' view, how do I write the URL pattern for the following php style of URL?

http://example.com/get_item/?id=2&type=foo&color=bar

(I am not using the standard 'nice' type of URL ie: http://example.com/get_item/2/foo/bar as it is not practical)

Specifically, how do I make the view respond when the user types the above in a browser, and how do I collect the parameters and use it in my view?

I tried to at least get the id part right but to no avail. The view won't run when I type this in my browser http://example.com/get_item?id=2

My url pattern:

(r'^get_item/id(?P<id>\d+)$', get_item)

My view:

def get_item(request):
    id = request.GET.get('id', None)
    xxxxxx

In short, how do I implement Php's style of url pattern with query string parameters in django?

1
  • 1
    how about a nicer URL get_item/2/foo/bar, and match that? So we could have get_item/2/pants/red. Commented Sep 16, 2010 at 11:32

2 Answers 2

77

Make your pattern like this:

(r'^get_item/$', get_item)

And in your view:

def get_item(request):
    id = int(request.GET.get('id'))
    type = request.GET.get('type', 'default')

Django processes the query string automatically and makes its parameter/value pairs available to the view. No configuration required. The URL pattern refers to the base URL only, the query string is implicit.

For normal Django style, however, you should put the id/slug in the base URL and not in the query string! Use the query parameters eg. for filtering a list view, for determining the current page etc...

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for the answers. I get it now. No need to use re to cater for the params in urls.py. Just collect the params in the views using request.Get.get()
how to get this in django 2 and 3
22

You just need to change your url pattern to:

(r'^get_item/$', get_item)

And your view code will work. In Django the url pattern matching is used for the actual path not the querystring.

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.