2010-09-14 169 views
30

假设我有一个'get_item'视图,如何为以下php样式的URL编写URL模式?Django和查询字符串参数

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

(我没有使用标准的“好”类型的URL即:http://example.com/get_item/2/foo/bar,因为它是不实际的)

具体来说,我怎么做我使视图响应当用户键入上述在浏览器中,我如何收集参数并在我的视图中使用它?

我试图至少得到id部分权利,但无济于事。当我在浏览器中输入该视图将不会运行http://example.com/get_item?id=2

我的网址模式:

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

我的观点:

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

总之,我该如何实现URL的PHP​​的风格模式与Django的查询字符串参数?

+0

如何更好的URL get_item/2/foo/bar,并匹配?所以我们可以有get_item/2 /裤子/红色。 – dotty 2010-09-16 11:32:21

回答

17

你只需要你的URL模式更改为:

(r'^get_item/$', get_item) 

而且您的视图代码将工作。在Django中,url模式匹配用于实际路径而不是查询字符串。

45

让你的模式是这样的:

(r'^get_item/$', get_item) 

而在你的看法:

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

虽然正常的详细视图等,你应该把ID /塞在URL中,而不是在请求参数!使用get参数例如。过滤列表视图,确定当前页面等...

+3

感谢您的答案。我现在明白了。无需使用re来满足urls.py中的参数。只需使用request.Get.get()收集视图中的参数 – Ben 2010-09-15 04:33:53