[英]Displaying dictionary in html from django render
我试图显示一些数据(从django视图作为字典输出)到html可折叠div(来自bootstrap3)。
例如,我将对象“数据”放入具有以下结构的模板中:
group value
-----------
A 1
A 2
A 3
B 1
B 2
我知道我可以轻松地遍历对象。 例如
{% for i in data %}
{{i.group}}
但是,我想做的是能够将“组”用作可折叠对象中的父对象,并将项目用作“值”。 就像是
{% for i in data %}
<div class="panel-group">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#{{ i.group }}">{{ i.group }}</a>
</h4>
</div>
<div id="{{ i.group }}" class="panel-collapse collapse">
<ul class="list-group" style="margin-left:30px">
<div class="row">
<li class="list-group-item">{{ i.value }}</li>
</div>
</ul>
</div>
</div>
</div>
{% endfor %}
</div>
如您所见,问题是,如果我按照上述方式进行操作,它将为非唯一的“组”值创建多个父类别。
首先,我们先将数据分组,然后再将其发送到模板:
from itertools import groupby
grouped = groupby(data, key=lambda _: _.group)
然后,我们稍微修改模板以迭代组和值:
{% for group, values in grouped %}
<div class="panel-group">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#{{ group }}">{{ group }}</a>
</h4>
</div>
<div id="{{ group }}" class="panel-collapse collapse">
<ul class="list-group" style="margin-left:30px">
{% for i in values %}
<div class="row">
<li class="list-group-item">{{ i.value }}</li>
</div>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endfor %}
</div>
在每个迭代中,组将是不同的,值是一个迭代器,原始数据与每个不同的组相对应。
这将为每个组创建单个标签,并为每个组内的每个值创建单独的条目。
谢谢@Tomas Farias。 使用您提到的类似方法。 首先,我创建了一个字典,然后发现django在模板中具有一个名为.items的内置函数,用于分隔key:value对
对于其他可能陷入困境的人来说,这是一个例子:假设您的views.py通过了词典
data = {'A':[1,2,3], 'B':[4,5,6]}
render(request, 'templates/your_template.html', 'data':data}
然后,您可以使用.items访问“ your_template.html”中的词典。
{% for key,value in data.items %}
{{ key }}
{{ value }}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.