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
相关产品推荐
相关产品推荐

