在我的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)
答案 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()])