如何创建这个嵌套的python字典?
这就是我想要的(警告:这里的Python noob,这可能是一种不正确的表示方式,但我希望您得到我想要的) 现在我的问题是如何在django视图中创建这本词典,目前为止是这样->如何创建这个嵌套的python字典?,python,django,Python,Django,这就是我想要的(警告:这里的Python noob,这可能是一种不正确的表示方式,但我希望您得到我想要的) 现在我的问题是如何在django视图中创建这本词典,目前为止是这样-> links = Links.objects.all() forms = {} for link in links: form = LinkForm(instance = link ) forms.update({ 'id' : link.id, 'form' : form}) # which
links = Links.objects.all()
forms = {}
for link in links:
form = LinkForm(instance = link )
forms.update({ 'id' : link.id, 'form' : form})
# which is obviously the wrong way to do it
这将创建字典列表:
links = Links.objects.all()
forms = []
for link in links:
form = LinkForm(instance = link)
forms.append({'id': link.id, 'form': form})
如果要创建字典字典,必须具有以下键:
links = Links.objects.all()
forms = {}
for link in links:
form = LinkForm(instance = link)
# you need something to use as a key
forms[key] = {'id': link.id, 'form': form}
注意,我更改了代码中空格的位置,以匹配标准Python方式,但这并不重要
嵌套字典的形式为:
forms = {
'key1': { 'id' : '1',
'form' : form_something,
},
'key2': { 'id' : '4',
'form' : form_something2
}
}
我在
form\u something2
之后添加了键并删除了逗号,我从未使用过django,但在纯python中,它会是这样的(您需要表单列表/元组,而不是表单字典):
编辑:
根据评论中的讨论,就性能而言,与元组相比,列表是更好的选择。编辑上面的代码以反映此更改。我认为您要做的是这样的:
forms = { '1': form_something,
'4':form_something2,
}
通过这种方式,您将查找带有id的表单(这是查找内容的常见方式)
您可以这样做:
forms = {}
for link in Links.objects.all():
form = LinkForm(instance = link )
forms[form.id] = form`
现在我很好奇你为什么要把表格保存在字典里?我觉得很奇怪
希望这有帮助,问题是我必须在django模板中使用此词典,不确定django模板是否呈现列表此代码根本不起作用。。。元组是不可变的,因此不能添加到它,空元组的语法是
tuple()
而不是()
。另外,只有当您有多个项目时才使用+=
它,它相当于扩展
。如果您有一个项目,请使用append
。我已经测试了代码,它肯定在Python2.6上运行。我不确定它在Django中是否有什么不同,但我会在下次用python编写代码时记住您的指针:)如果每次都执行id(forms)
,您将看到您没有添加到它,而是每次都使用一个新项进行复制。有了一个列表,你可以直接添加到同一个列表中。关于()
,我错了——我完全忘记了这是有效的。Django模板需要对象字典来呈现。您的表单
不是有效的python字典。它是由两个字典组成的集合,您不能这样做,因为字典是不可散列的。
forms = { '1': form_something,
'4':form_something2,
}
forms = {}
for link in Links.objects.all():
form = LinkForm(instance = link )
forms[form.id] = form`