You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Flask Jinja模板实现列表值动态渲染为Checkbox复选框

实现方案

1. 后端传值(以Flask框架为例,其他Web框架逻辑一致)

你需要将列表以及对应表单值的映射传入模板上下文:

list_val = ['APPROVED','UN-APPROVED','DEACTIVATE']
# 定义状态与短value的映射关系,和你原有静态代码的value完全对齐
val_map = {
    'APPROVED': 'app',
    'UN-APPROVED': 'unapp',
    'DEACTIVATE': 'deac'
}
# 将两个变量传入模板渲染上下文,不同框架的传参写法略有差异
return render_template('你的模板文件名.html', list_val=list_val, val_map=val_map)

2. Jinja模板代码

替换你原有的静态HTML部分为如下循环写法即可,渲染输出结果和你给出的静态代码完全一致:

{% for item in list_val %}
<input type="checkbox" id="val{{ loop.index }}" name="val{{ loop.index }}" value="{{ val_map[item] }}">
<label for="val{{ loop.index }}"> {{ item }}</label>{% if not loop.last %}<br>{% endif %}
{% endfor %}

备选写法(无需后端传val_map)

如果不想在后端额外定义映射,也可以直接在模板内做值判断:

{% for item in list_val %}
{% set short_val = 'app' if item == 'APPROVED' else 'unapp' if item == 'UN-APPROVED' else 'deac' %}
<input type="checkbox" id="val{{ loop.index }}" name="val{{ loop.index }}" value="{{ short_val }}">
<label for="val{{ loop.index }}"> {{ item }}</label>{% if not loop.last %}<br>{% endif %}
{% endfor %}

代码说明

  • loop.index是Jinja循环的内置变量,从1开始计数,刚好匹配你原有id、name的后缀序号
  • loop.last用于判断是否为最后一个循环项,避免最后一个复选框后面多渲染多余的换行标签
  • 两种写法最终渲染的HTML和你给出的静态示例完全一致

内容的提问来源于stack exchange,提问作者lazar cognos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:24:03