javascript - 选择 flask 后不显示下拉选择的值?

标签 javascript python html flask jinja2

如何使用 HTML <select>flask - render_template 预填充的下拉列表.

这是 <select>从 Flask-jinja2 预填充的下拉列表。

<div>
    <select class="test-default" id="testTime">
        {% for option in options %}
        <option value={{ option }}>{{ option }}</option>
        {% endfor %}
    </select>
</div>

test.html中的脚本,

function fetch_test_data(){
    let test = $("#testTime").val();
    axios({ 
        method:"get",
        url:"/test",
        params: {
            test
        }
    }).then(function (response) {
        $(document.body).html(response.data)
    }); 
}

test.py文件 - 带有应用程序路线和 options用于下拉菜单。

@app.route('/test', methods=["GET"])
@login_required
def transactions_view():
    options = ["0","7","14","30"]

    return render_template("test.html", options=options)

上面的例子中如何使用selected属性来显示所选值。

当选择一个值时, 正确的值返回到 flask 并渲染回来。但是下拉可视化/列表显示第一个值而不是所选值?

我尝试过的:
我可以获得 dropdown select用于定义的下拉列表。

defined-dropdown - 供引用

<div>
    <select class="test-default" id="testTime">
    <option value=0>today</option>
    <option value=7>week</option>
    <option value=14>fortnight</option>
    <option value=30>month</option>
    </select>
</div>

{{ time }}

我可以使用上面的下拉菜单来实现:

<div>
    <select class="test-default" id="testTime">
    <option value=0 {% if time == 0 %} selected="selected" {% endif %}>today</option>
    <option value=7 {% if time == 7 %} selected="selected" {% endif %}>week</option>
    <option value=14 {% if time == 14 %} selected="selected" {% endif %}>fortnight</option>
    <option value=30 {% if time == 30 %} selected="selected" {% endif %}>month</option>
    </select>
</div>

哪里{{ time }}从 test.py 返回

@app.route('/test', methods=["GET"])
@login_required
def transactions_view():
    time = (request.args.get("test"))
    return render_template("test.html", time=time)

最佳答案

您必须将 transactions_view() 中选定的时间传递给模板,并在渲染过程中测试每个选项的值。

首先,在 test.py 中,您必须像这样修改 transactions_view():

@app.route('/test', methods=["GET"])
@login_required
def transactions_view():
    options = (
        (0, 'today'),
        (7, 'week'),
        (14, 'fortnight'),
        (30, 'month'),
    )
    default_time = 0
    selected_time = int(request.args.get('time', default_time))

    return render_template("test.html", options=options, selected_time=selected_time)

这里我们将 options 变量作为键标签对的元组,selected_time 变量保存来自 GET 的所选时间的值code> 请求或默认值。这两个变量都已传递给 render_template 函数,因此我们可以在模板文件中访问它们。

test.html 模板文件中,您必须修改 for 循环,如下所示:

<div>
  <select class="test-default" id="testTime">
    {% for time, label in options %}
    <option value="{{ time }}" {% if time == selected_time %}selected="selected"{% endif %}>{{ label }}</option>
    {% endfor %}
  </select>
</div>

这里我们测试每个选项的time值是否是选定的时间,并相应地设置selected属性。

关于javascript - 选择 flask 后不显示下拉选择的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272839/

相关文章:

python - IBpy 获取订单状态更新

python - 无法使用 python 的多处理 Pool.apply_async() 腌制 <type 'instancemethod'>

javascript - 删除添加的 html 表格行

html - 如何使用 css 为 H2 标题标签留下一些顶部空白

html - 将 mysql 数据库打印到 socket.io 和 node.js 中的 html 页面

javascript - 用 useEffect 替换 getDerivedStateFromProps

javascript - 获取点击进度条部分的宽度并计算秒数

javascript - 如何在 JQuery 中使用 IndexOf

python - pydub可以设置最大/最小音量吗?

javascript - 使用 ng-repeat 从对象数组中使用另一个对象的 id 属性通过 id 查找对象