簡體   English   中英

從Django render用html顯示字典

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM