使用Flask向HTML添加属性的有效方法,选择元素的代码行更少?
我有一个使用Flask向HTML添加属性的有效方法,选择元素的代码行更少?,html,flask,attributes,jinja2,Html,Flask,Attributes,Jinja2,我有一个select元素,如果该信息已经存在,我想从数据库中填充该元素。例如,这就是我为性别所做的: <select class="form-control" id="gender"> <option value="-5">Not Selected</option> {% if current_user.gender == 0 %} <option value="0" selected>Male</option&g
select
元素,如果该信息已经存在,我想从数据库中填充该元素。例如,这就是我为性别所做的:
<select class="form-control" id="gender">
<option value="-5">Not Selected</option>
{% if current_user.gender == 0 %}
<option value="0" selected>Male</option>
{% else %}
<option value="0">Male</option>
{% endif %}
{% if current_user.gender == 1 %}
<option value="1" selected>Female</option>
{% else %}
<option value="1">Female</option>
{% endif %}
</select>
未选择
{%if当前_user.gender==0%}
男性
{%else%}
男性
{%endif%}
{%如果当前_user.gender==1%}
女性
{%else%}
女性
{%endif%}
现在我有了另一个
select
元素,它有6个不同的选项(都是整数值0、1、2…5)。有没有一种方法可以让它更简洁,而不是像这样用if语句为每一行编写30行代码?是的,jinja2模板中有for循环
例如,如果您有一个包含所有选择选项的python列表:
options = ['option1', 'option2', 'option3', ...]
<select class="form-control" id="gender">
{% for option in options %}
<option value="{{ loop.index }}"
{% if current_user.gender == loop.index %}
selected
{% endif %}
>{{ option }}</option>
{% endfor %}
<option value="-5">Not Selected</option>
</select>
options=['option1','option2','option3',…]
{options%%中的选项为%s}
{{option}}
{%endfor%}
未选择
loop.index表示循环的当前迭代。(1)索引
这是一个示例,但在遍历从数据库获取的对象时,还有另一个示例:
objects = [object1, object2, object3, ...]
<select class="form-control" id="gender">
{% for object in objects %}
<option value="{{ object.value }}"
{% if object.value == current_user.gender %}
selected
{% endif %}
>{{ object.name }}</option>
{% endfor %}
<option value="-5">Not Selected</option>
</select>
objects=[object1,object2,object3,…]
{对象%中的对象的%}
{{object.name}
{%endfor%}
未选择
我会在python代码中定义选项
并将其传递到HTML页面吗?是的,您应该在python代码中定义选项值列表,或者将其存储在数据库中的某个位置,然后从数据库中获取它们。如果您使用Flask,我很确定您使用的是render_模板。例如,返回render_模板('page.html',options=options,objects=objects),该python变量将在html中可用。此外,您还可以在上述代码中的for循环之前使用jinja赋值标记:{%set options=['option1','option2','option3']%},这样您就不需要在flask路由中定义python选项。