我试图在POST上将Python词典列表传递给Form,但不确定如何执行。我正在组装字典,然后将其添加到主字典中,然后将其传递给FORM进行显示。
非常简化的示例:
Views.py
vehicles = {
'vehicle1': {'car': 'pontiac', 'engine': '400', 'model': 'GTO'},
'vehicle2': {'car': 'chevrolet', 'engine': '396', 'model': 'Chevelle'},
'vehicle3': {'car': 'ford', 'engine': '289', 'model': 'Mustang'}
}
return render(request, "vehicle_detail.html", {'vehicles': vehicles})
HTML
<p>
{% for vehicle in vehicles %}
<b>{{ vehicle.car }}</b>
<b>{{ vehicle.engine }}</b>
<b>{{ vehicle.model }}</b>
{% endfor %}
</p>
我尝试了几种不同的方法来执行此操作,但是没有用。处理此问题的正确方法是什么?
答案 0 :(得分:2)
.values()
离子对的dict
您要遍历字典的值,因此可以编写:
<p>
{% for vehicle in vehicles.values %}
<b>{{ vehicle.car }}</b>
<b>{{ vehicle.engine }}</b>
<b>{{ vehicle.model }}</b>
{% endfor %}
</p>
但是请注意,Python中的字典是无序的,因此元素的渲染顺序可以互换(例如,一次庞蒂亚克渲染将在福特之前进行,有时反之亦然。您无法解决此问题)模板,因为那时订单已经丢失。
tuple
,list
,......的保证订单但是,您可以使用保留顺序的列表,元组或其他数据结构,例如:
vehicles = [
{'car': 'pontiac', 'engine': '400', 'model': 'GTO'},
{'car': 'chevrolet', 'engine': '396', 'model': 'Chevelle'},
{'car': 'ford', 'engine': '289', 'model': 'Mustang'}
]
return render(request, "vehicle_detail.html", {'vehicles': vehicles})
在这种情况下,很简单:
<p>
{% for vehicle in vehicles %}
<b>{{ vehicle.car }}</b>
<b>{{ vehicle.engine }}</b>
<b>{{ vehicle.model }}</b>
{% endfor %}
</p>
答案 1 :(得分:1)
引用字典的方式是正确的,但是在Views.py中引用字典的方式不正确
这将是正确的方法:
return render(request, "vehicle_detail.html", {'vehicles': vehicles.items()})
这应该可以工作,您也可以在HTML中执行以下操作:
{% for vehicle in vehicles.items() %}