Jinja2 嵌套包含两个列表的字典

问题描述 投票:0回答:1

简单的问题,可能不需要很多代码:

如何使用 jinja2 显示由两个列表组成的字典(如下所示),将第二个列表中的项目与第一个列表中的项目穿插在一起?

字典的关键词是“标题”和“结果”。

字典看起来像这样:

{   'titles': [('title-1',), ('title-2',), ('title-3',)], 

    'results': [
        (1, 'author-1', publisher-1', genre-1),
        (2, 'author-2', publisher-2', genre-2), 
        (3, 'author-3', publisher-3', genre-3)
    ]
}

期望的输出如下:

title-1

author-1, publisher-1, genre-1

title-2

author-2, publisher-2, genre-2

title-3

author-3, publisher-3, genre-3

这是flask-sqlite3 输出,我也不理解“标题”中的尾随逗号,我认为这是一个不相关的问题。

预先感谢您的指导。

我已经使用 jijna2 模板在圆圈中循环(没有双关语)几个小时,尝试了许多不同的排列,但没有成功,使用了 Stackoverflow 上其他答案的建议。

sqlite flask jinja2
1个回答
0
投票

使用上面 Patrick Yoder 给出的评论:

在app.py中:

app.jinja_env.filters['zip'] = zip

app.py 中创建 2 个列表(标题和结果)的 SQL 执行:

con = sqlite3.connect(DATABASE)
cur = con.cursor()

SQL 语句,然后...

query1 = cur.execute(sql_1)
titles = cur.fetchall()

query2 = cur.execute(sql_2)
results = cur.fetchall()

创建字典,命名为“data”

data = { "titles": titles , "results": results  }

return render_template("/custom-search.html", data=data)

tldr;这是解决方案...

在custom-search.html页面上(仅限相关项目)

{% if data %}

{% set count = namespace(value=0) %}

{% for titles, results in data['titles']|zip(data['results']) %}

在两个列表项标签中...

{{ data.titles[count.value] }}

{{ data.results[count.value] }}

{% set count.value = count.value + 1 %}

{% endfor %}

{% endif %}

我希望我能弄清楚如何删除每行输出中的左括号和右括号,但这是一个单独的问题

© www.soinside.com 2019 - 2024. All rights reserved.