将字典传递给Django表单

时间:2018-08-14 23:56:21

标签: python django

我试图在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>

我尝试了几种不同的方法来执行此操作,但是没有用。处理此问题的正确方法是什么?

2 个答案:

答案 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中的字典是无序的,因此元素的渲染顺序可以互换(例如,一次庞蒂亚克渲染将在福特之前进行,有时反之亦然。您无法解决此问题)模板,因为那时订单已经丢失。

带有tuplelist,......的保证订单

但是,您可以使用保留顺序的列表,元组或其他数据结构,例如:

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() %}