Django:查找以相同单词开头的参数数量

时间:2018-10-01 17:13:25

标签: python django request

在我的Django应用的views.py中,我想编写一个函数来查找请求中以'item'开头的可选参数的数量

def get_items(request):

注意:传递给此函数的请求可能具有各种数量的可选参数,这些可选参数以'item'开头,其编号为:&item1 =,&item2 =,&item3 = .. etc,以及其他未启动的可选参数带有“项目”

因此,请求可能与以下任何请求类似:

/myapp/data/&item1=foo&item2=bar&item3=baz&otherParam=other
/myapp/data/&item1=baa&otherParam=other
/myapp/data/&item1=bla&item2=baa&otherParam=other

我知道我可以执行以下操作(但这需要我提前知道“项目”的数量):

request.GET.get('item1')
request.GET.get('item2')
request.GET.get('item3')

是否可以找出“ item”个可选参数的数量? (因此,在上面的第一个请求中为3,在第二个请求中为1,在第三个请求中为2)

3 个答案:

答案 0 :(得分:1)

您可以只使用len(request.GET)来查找request.GET对象中的键/值对。

答案 1 :(得分:0)

QueryDict响应所有常用的dict方法,因此您可以直接遍历键-将其与列表理解结合起来并在其上调用len

len(k for k in request.GET if k.startswith('item'))

或者,如果您实际上需要匹配的值,请结合使用items和dict理解:

items = {k: v for k, v in request.GET.items() if k.startswith('item')}

请注意,您尚未显示前端如何生成这些值,但您可能首先不想这样做。 QueryDict的每个键可以有多个值,因此您可以在相同的item参数中发送所有数据:

/myapp/data/?item=foo&item=bar&item=baz&otherParam=other

现在,您只需执行request.GET.getlist('item')即可获得['foo', 'bar', 'baz']

答案 2 :(得分:0)

len([value for key, value in request.GET.items() if 'item' in key.lower()])