【发布时间】:2020-11-17 00:34:04
【问题描述】:
我正在尝试在 Jinja 中使用 for loop 创建一个基本表,数据是 Python 列表,因为它是使用 fetchall() 从 SQLite 数据库中提取的。虽然我似乎找不到正确的语法。
我希望桌子是这样的:
符号 |姓名 |股票 |价格 |
苹果 |苹果| 3 | $114.86|
特斯拉 |特斯拉| 2 | $214.04|
到目前为止,这是我的代码:
蟒蛇:
@app.route("/")
@login_required
def index():
"""Show portfolio of stocks"""
with sqlite3.connect("finance.db") as conn:
cur = conn.cursor()
user = session["user_id"][0]
cur.execute("SELECT symbol, name, SUM(shares), price FROM transactions WHERE username=? GROUP BY symbol", (user[0],))
index_table = cur.fetchall()
return render_template("index.html", index_table=index_table)
print(index_table) 输出类似[('AAPL', 'Apple, Inc.', 2, 119.95), ('TSLA', 'Tesla, Inc.', 12, 407.0)] 的列表
神社模板:
{% extends "layout.html" %}
{% block body %}
<table>
{% for row in index_table %}
<tr>
<td>{{ row }}</td>
<td> {{ row }}</td>
<td> {{ row }}</td>
<td> {{ row }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
我也试过了:
{% extends "layout.html" %}
{% block body %}
<table>
{% for row in index_table %}
<tr>
<td>{{ row[0] }}</td>
<td> {{ row[1] }}</td>
<td> {{ row[2] }}</td>
<td> {{ row[3] }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
Jinja 文档中的这一行让我想知道 Jinja 是否只接受字典而不接受列表: “模板变量由传递给模板的上下文字典定义。” 这句话对我来说有点神秘,但也许有经验的人可以解释一下?
如果是这种情况,那么我不确定如何将此列表映射到字典,因为它的长度和大小会波动。我对字典理解的理解仅限于...
dictionary = {key:value for vars in iterable}
提前致谢!
【问题讨论】:
-
嗨,你的第二个例子看起来很对。输出是什么样的?
-
谢谢克里斯蒂安。表格应该在的网页区域是空白的。
-
我想知道它还能是什么。该站点的其他页面仍按预期运行,并且都具有某种 Jinja 功能:注册、登录、报价和购买都有一个单独的页面。
标签: python list for-loop variables jinja2