Django和查询字符串参数

Ben*_*Ben 38 python django

假设我有一个'get_item'视图,我如何为以下php风格的URL编写URL模式?

http://example.com/get_item/?id=2&type=foo&color=bar
Run Code Online (Sandbox Code Playgroud)

(我没有使用标准的'漂亮'类型的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)
Run Code Online (Sandbox Code Playgroud)

我的看法:

def get_item(request):
    id = request.GET.get('id', None)
    xxxxxx
Run Code Online (Sandbox Code Playgroud)

简而言之,如何在django中使用查询字符串参数实现Php的url模式样式?

Ber*_*ant 55

使你的模式像这样:

(r'^get_item/$', get_item)
Run Code Online (Sandbox Code Playgroud)

在你看来:

def get_item(request):
    id = int(request.GET.get('id'))
    type = request.GET.get('type', 'default')
Run Code Online (Sandbox Code Playgroud)

虽然对于普通的细节视图等,你应该将id/slug放在url而不是查询字符串中!使用get参数,例如.用于过滤列表视图,用于确定当前页面等...

  • 谢谢你的回答.我现在明白了.无需使用re来满足urls.py中的params.只需使用request.Get.get()在视图中收集参数 (3认同)
  • 如何在 django 2 和 3 中得到这个 (3认同)

Nat*_*han 20

您只需将您的网址格式更改为:

(r'^get_item/$', get_item)
Run Code Online (Sandbox Code Playgroud)

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