PHP的表单括号技巧是Django的___?

4 投票
7 回答
927 浏览
提问于 2025-04-15 20:55

在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 参数可以让你多次使用同一个表单。

撰写回答