我正在尝试将一些数据(从 django View 作为字典输出)显示到 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>
在每次迭代中,组将是不同的,并且值是一个迭代器,其中原始数据对应于每个不同的组。
这将为每个组创建单个标签,并为每个组内的每个值创建单独的条目。
关于python - 从 django 渲染中显示 html 中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53917611/