Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Flask向HTML添加属性的有效方法,选择元素的代码行更少?_Html_Flask_Attributes_Jinja2 - Fatal编程技术网

使用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选项。