[英]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.