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>