【问题标题】:Why isn't my second Jinja for loop running?为什么我的第二个 Jinja for 循环没有运行?
【发布时间】:2021-10-16 17:50:26
【问题描述】:

我正在尝试使用 sqlite 3 从我的 sql 数据库中获取用户,并在表单中显示名称以选择 2 并设置匹配项。但是,当我只通过我的第一个 jinja for 循环运行传递变量时,它会将第二个多选框留空。

我已经尝试过为两个循环传递相同的变量,并为每个循环传递一个不同的变量,而第二个仍然没有填充。

from flask import Flask
from flask import render_template
import sqlite3

con = con = sqlite3.connect('chess-test.db')
cur = con.cursor()

app = Flask(__name__)

@app.route('/')
def index():
    users = cur.execute('''SELECT * FROM chess ORDER BY hcp ''')
    return render_template("index.html", users=users)

@app.route('/game')
def game():
    names = cur.execute('''SELECT * FROM chess ORDER BY name ''')
    users = cur.execute('''SELECT * FROM chess ORDER BY name ''')
    return render_template("game.html", names1=names, users=users)

我的 jinja 模板看起来像这样。

<body>
<div class="container">
    <div class="text-center">
        <div class="display-4">Hvem skal spille?</div>
    </div>

    <div class="form-group">
        <select multiple class="form-control">
            {% for item in names1 %}
            <option>{{ item[0] }}</option>
            {% endfor %}
        </select>

        <label for="exampleFormControlSelect2">mod</label>
        <select multiple class="form-control">
            {% for item in users %}
            <option>{{ item[0] }}</option>
            {% endfor %}
        </select>
    </div>
</div>

这是生成的页面。

【问题讨论】:

  • 可以查看用户是否收到数据。并检查用户值类型(是字典还是列表?)

标签: python html flask jinja2


【解决方案1】:

在执行下一个查询之前读取查询集。参考here

@app.route('/game')
def game():
    cur.execute('''SELECT * FROM chess ORDER BY name ''')
    names = cur.fetchall()
    cur.execute('''SELECT * FROM chess ORDER BY name ''')
    users = cur.fetchall()
    return render_template("game.html", names1=names, users=users)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多