Django 和查询字符串参数
假设我有一个叫做 'get_item' 的视图,我该如何写出一个符合以下 PHP 风格的 URL 模式呢?
http://example.com/get_item/?id=2&type=foo&color=bar
(我不想使用标准的那种“好看”的 URL,比如:http://example.com/get_item/2/foo/bar
,因为这样不太实际)
具体来说,我该如何让这个视图在用户在浏览器中输入上面的 URL 时能够响应,并且如何收集这些参数并在我的视图中使用呢?
我尝试过至少把 ID 部分弄对,但没有成功。当我在浏览器中输入 http://example.com/get_item?id=2
时,视图并没有运行。
我的 URL 模式是:
(r'^get_item/id(?P<id>\d+)$', get_item)
我的视图是:
def get_item(request):
id = request.GET.get('id', None)
xxxxxx
总之,我该如何在 Django 中实现 PHP 风格的 URL 模式,并使用查询字符串参数呢?
2 个回答
22
你只需要把你的网址格式改成:
(r'^get_item/$', get_item)
这样你的视图代码就能正常工作了。在Django中,网址格式匹配是针对实际的路径,而不是查询字符串。
73
把你的模式设置成这样:
(r'^get_item/$', get_item)
然后在你的视图中:
def get_item(request):
id = int(request.GET.get('id'))
type = request.GET.get('type', 'default')
Django会自动处理查询字符串,并把参数和对应的值提供给视图。你不需要做额外的配置。URL模式只涉及基本的URL,查询字符串是隐含的。
不过,按照正常的Django风格,你应该把id或slug放在基本的URL中,而不是放在查询字符串里!查询参数可以用来过滤列表视图、确定当前页面等等……