PHP的表单括号技巧是Django的___?
在PHP中,你可以创建一些表单元素,名字可以是这样的:
category[1]
category[2]
甚至可以是这样的:
category[junk]
category[test]
当表单提交后,category
会自动变成一个很方便的字典,像这样:
category[1] => "the input value", category[2] => "the other input value"
那么在Django中有没有类似的方法呢?request.POST.getlist
不是很合适,因为它只是返回一个列表,而不是字典。我还需要键值对。
7 个回答
0
我不是Python专家,但你可以试试这个
for key,value in request.POST.iteritems()
doSomething....
1
虽然看起来不太好,但应该能完成任务:
import re
def getdict(d, pref):
r = re.compile(r'^%s\[(.*)\]$' % pref)
return dict((r.sub(r'\1', k), v) for (k, v) in d.iteritems() if r.match(k))
D = {
'foo[bar]': '123',
'foo[baz]': '456',
'quux': '789',
}
print getdict(D, 'foo')
# Returns: {'bar': '123', 'baz': '456'}
2
你可以使用 django.utils.datastructures.DotExpandedDict
,输入的名字可以是 category.1、category.2 等等,这样可以实现类似的功能。不过我不太明白为什么要这么做,因为如果你需要验证并重新显示你收到的信息,使用 django.forms.Form
会更方便,它会帮你处理所有事情——合适的字段会自动调用 getlist
方法,而 prefix
参数可以让你多次使用同一个表单。