如何在金贾模板中迭代字典列表?

我试过:

list1 = [{"username": "abhi", "pass": 2087}]
return render_template("file_output.html", list1=list1)

在模板中:

<table border=2>
<tr>
<td>
Key
</td>
<td>
Value
</td>
</tr>
{% for dictionary in list1 %}
{% for key in dictionary %}
<tr>
<td>
<h3>{{ key }}</h3>
</td>
<td>
<h3>{{ dictionary[key] }}</h3>
</td>
</tr>
{% endfor %}
{% endfor %}
</table>

上面的代码将每个元素分成多个字符:

[


{


"


u


s


e


r


...

我用一个简单的 Python 脚本测试了上面的嵌套循环,它工作得很好,但是在金贾模板中就不行了。

301909 次浏览
{% for i in yourlist %}
{% for k,v in i.items() %}
{# do what you want here #}
{% endfor %}
{% endfor %}

资料:

parent_list = [{'A': 'val1', 'B': 'val2'}, {'C': 'val3', 'D': 'val4'}]

在 Jinja2迭代中:

{% for dict_item in parent_list %}
{% for key, value in dict_item.items() %}
<h1>Key: \{\{key}}</h1>
<h2>Value: \{\{value}}</h2>
{% endfor %}
{% endfor %}

注:

确保您已经有了 dict 项目的列表。如果你得到的 UnicodeError可能是内部包含的字典的值 Unicode 格式。这个问题可以在你的 views.py中解决。 如果 dict 是 unicode对象,则必须将其编码为 utf-8

作为@Navaneethan 回答的旁注,Jinja2能够为列表和字典做“常规”项目选择,因为我们知道字典的键,或者列表中项目的位置。

资料:

parent_dict = [{'A':'val1','B':'val2', 'content': [["1.1", "2.2"]]},{'A':'val3','B':'val4', 'content': [["3.3", "4.4"]]}]

在 Jinja2迭代中:

{% for dict_item in parent_dict %}
This example has \{\{dict_item['A']}} and \{\{dict_item['B']}}:
with the content --
{% for item in dict_item['content'] %}\{\{item[0]}} and \{\{item[1]}}{% endfor %}.
{% endfor %}

呈现的输出:

This example has val1 and val2:
with the content --
1.1 and 2.2.


This example has val3 and val4:
with the content --
3.3 and 4.4.

这只是类似问题的一个附带说明(如果我们不想循环访问) :

如何使用金贾模板中的变量键查找字典?

这里有一个例子:

{% set key = target_db.Schema.upper()+"__"+target_db.TableName.upper() %}
\{\{ dict_containing_df.get(key).to_html() | safe }}

可能很明显。但是我们不需要在花括号中加上花括号。直接使用 Python 语法。(我发帖是因为我觉得很困惑... ...)

或者,你可以简单地

\{\{dict[target_db.Schema.upper()+"__"+target_db.TableName.upper()]).to_html() | safe }}

但是如果找不到密钥,它就会吐出一个错误,所以最好在金贾使用 ABc0。

**get id from dic value. I got the result.try the below code**
get_abstracts = s.get_abstracts(session_id)
sessions = get_abstracts['sessions']
abs = {}
for a in get_abstracts['abstracts']:
a_session_id = a['session_id']
abs.setdefault(a_session_id,[]).append(a)
authors = {}
# print('authors')
# print(get_abstracts['authors'])
for au in get_abstracts['authors']:
# print(au)
au_abs_id = au['abs_id']
authors.setdefault(au_abs_id,[]).append(au)
**In jinja template**
{% for s in sessions %}
<h4><u>Session : \{\{ s.session_title}} - Hall : \{\{ s.session_hall}}</u></h4>
{% for a in abs[s.session_id] %}
<hr>
<p><b>Chief Author :</b>  Dr. \{\{ a.full_name }}</p>
               

{% for au in authors[a.abs_id] %}
<p><b> \{\{ au.role }} :</b> Dr.\{\{ au.full_name }}</p>
{% endfor %}
{% endfor %}
{% endfor %}

第一个答案 去掉字典条目中的括号 AND try again !!

{% for dict_item in parent_list %}
{% for key, value in dict_item.items %}
<h1>Key: \{\{key}}</h1>
<h2>Value: \{\{value}}</h2>
{% endfor %}
{% endfor %}