相关疑难解决方法(0)

处理Django request.GET和多个变量用于相同的参数名称

在django视图等中,您可以访问request.GET ['variablename'],因此在您的视图中,您可以返回执行以下操作:

myvar = request.GET['myvar']
Run Code Online (Sandbox Code Playgroud)

实际的request.GET ['myvar']对象类型是:

<class 'django.http.QueryDict'>
Run Code Online (Sandbox Code Playgroud)

现在,如果你想为同一参数名传递多个变量,即

http://example.com/blah/?myvar=123&myvar=567

换句话说,您希望为参数myvar返回一个python 列表

基本上我想做的就是这样

for var in request.GET['myvar']:
    print(var)
Run Code Online (Sandbox Code Playgroud)

但是,当您尝试这样时,您只获得在url中传递的最后一个值,即在上面的示例中,您将得到567

shell中的结果将是:

5
6
7
Run Code Online (Sandbox Code Playgroud)

但是,当你打印request.GET它似乎有一个列表,即:

<QueryDict: {u'myvar': [u'123', u'567']}>
Run Code Online (Sandbox Code Playgroud)

好的更新:它的目的是返回最后一个值,我的用例是我需要一个列表.

来自django docs:

的QueryDict.getitem(key)返回给定键的值.如果键具有多个值,则 getitem()将返回最后一个值.如果密钥不存在,则引发django.utils.datastructures.MultiValueDictKeyError.(这是Python标准KeyError的子类,因此您可以坚持捕获KeyError

QueryDict.getlist(key)以Python列表的形式返回带有请求键的数据.如果密钥不存在,则返回空列表.它保证返回某种列表.

更新:如果有人知道为什么django dev已经这样做了,请让我知道,显示一个列表似乎反直觉,它不像一个.不是pythonic!

django django-urls django-views

71
推荐指数
1
解决办法
5万
查看次数

标签 统计

django ×1

django-urls ×1

django-views ×1