将宏参数传递给 jinja 中的 if == 测试?

Passing a macro argument to an if == test in jinja?

我正在使用 Tarbell 发布库存电子表格的格式化版本。每行都有一个类别,所以我可以这样做:

<h2>Power Tools</h2>
{% for row in inventory %}
  {% if row.Category == "powertools" %}
    <b>{{ row.Display_Name|e }}</b> <br />
  {% endif %}
{% endfor %}

<h2>A/V Gear</h2>
{% for row in inventory %}
  {% if row.Category == "av" %}
    <b>{{ row.Display_Name|e }}</b><br />
  {% endif %}
{% endfor %}

获取所有电动工具的列表,然后是 A/V 齿轮的列表。我想把它移到一个宏中,我可以用几个参数调用它。我有这个:

  {% macro list(cat, title='') -%}
      <p>Category: {{ cat }}; Header: {{ title }}</p>
      {% for row in inventory %}
        {% if row.Category == "{{ cat }}" %}
          <b>{{ row.Display_Name|e }}</b><br />
        {% endif %}
      {% endfor %}
  {%- endmacro %}

当我调用它时:

  {{ list('av', title='Cameras and Audio Recorders')}}
  {{ list('powertools', title='Power Tools')}}

我按预期看到 "Category: powertools; Header: Power Tools" 和 "Category: av; Header: Cameras and Audio Recorders",所以我知道宏可以听到我的声音,但列表本身没有显示。我可以在比较测试中使用宏参数吗?怎么样?

块内不需要变量插值语法 - 您可以像在 Python:

中那样按名称引用变量
{# Do this #}
{% if row.Category == cat %}

{# Instead of this #}
{% if row.Category == "{{ cat }}" %}