繁体   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