Jinja2 干净地模板化布尔变量
Jinja2 templating boolean variables cleanly
以下代码选择所有 3 个选项(尽管可能只需要一个选项)。
<select id="example-getting-started" name="test" multiple="multiple">
<option value="cheese" selected="NO">Cheese</option>
<option value="tomatoes" selected>Tomatoes</option>
<option value="mozarella" selected="maybe">Mozzarella</option>
<option value="mushrooms">Mushrooms</option>
<option value="pepperoni">Pepperoni</option>
<option value="onions">Onions</option>
</select>
将其正确转换为 Jinja2 模板并不难,但它很冗长,并且其大小随着布尔标记的数量呈指数级增长。这里有更清洁的解决方案吗?在下面的示例中,pizza_dict
是一个 python 字典,它将每个配料与是否在披萨上的布尔值相关联。
<select id="example-getting-started" name="test" multiple="multiple">
{% for k in pizza_dict %}
{% if pizza_dict[k] %}
<option value="{{ k }}">{{ k }}</option>
{% else %}
<option value="{{ k }}" selected>{{ k }}</option>
{% endif %}
{% endfor %}
</select>
你能不能把它简化成这样:
<select id="example-getting-started" name="test" multiple="multiple">
{% for k in pizza_dict %}
<option value="{{ k }}" {% if pizza_dict[k] %}selected{% endif %}>{{ k }}</option>
{% endfor %}
</select>
以下代码选择所有 3 个选项(尽管可能只需要一个选项)。
<select id="example-getting-started" name="test" multiple="multiple">
<option value="cheese" selected="NO">Cheese</option>
<option value="tomatoes" selected>Tomatoes</option>
<option value="mozarella" selected="maybe">Mozzarella</option>
<option value="mushrooms">Mushrooms</option>
<option value="pepperoni">Pepperoni</option>
<option value="onions">Onions</option>
</select>
将其正确转换为 Jinja2 模板并不难,但它很冗长,并且其大小随着布尔标记的数量呈指数级增长。这里有更清洁的解决方案吗?在下面的示例中,pizza_dict
是一个 python 字典,它将每个配料与是否在披萨上的布尔值相关联。
<select id="example-getting-started" name="test" multiple="multiple">
{% for k in pizza_dict %}
{% if pizza_dict[k] %}
<option value="{{ k }}">{{ k }}</option>
{% else %}
<option value="{{ k }}" selected>{{ k }}</option>
{% endif %}
{% endfor %}
</select>
你能不能把它简化成这样:
<select id="example-getting-started" name="test" multiple="multiple">
{% for k in pizza_dict %}
<option value="{{ k }}" {% if pizza_dict[k] %}selected{% endif %}>{{ k }}</option>
{% endfor %}
</select>