如何查看Django QueryDict键是否与模式匹配

时间:2011-05-13 22:42:50

标签: django django-forms

我正在使用列表类型视图(购物车)的网站上工作,其中每个项目都有一个选择下拉窗口小部件来更改传送类型。生成的HTML由for循环创建,使得'item_id_foo'在每个循环中发生变化,如下所示:

<select name='item_id_foo'>
<option value='bar1'>bar1</option>
...
<input type='submit' name='submit' value='Change'/>
</select>

因此,request.POST.copy有一个键/值,如{'item_id_foo':'bar1'}。我的问题是如何找到看起来像'item_id_foo','item_id_bar'等的键。像“getitem”,“get”或“contains”这样的方法假设你知道完整键的样子,我只知道模式。如何匹配键上的图案?

谢谢你, bkev

更新:选择的示例值如下: 'item_id_1','item_id_2','item_id_3'...匹配购物车中需要编辑的商品的ID(每种都有自己的送货方式和费用)。

2 个答案:

答案 0 :(得分:1)

为什么不遍历整个列表然后对每个项目的名称进行正则表达式? QueryDict.lists()QueryDict.values()允许您获取所有内容,然后循环播放。

<强> QueryDict.lists() 与items()类似,除了它包含字典的每个成员的所有值,作为列表。

例如:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[(u'a', [u'1', u'2', u'3'])]

链接:http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict

答案 1 :(得分:1)

只需迭代按键并保留你想要的那些

>>> post = {'item_id_1': 1, 'item_id_2': 2, 'item_id_3': 3, 'noitem': 0}
>>> dict([(k, v) for k, v in post.items() if k[:8] == 'item_id_'])
{'item_id_3': 3, 'item_id_2': 2, 'item_id_1': 1}