将一个宏参数传递给jinja中的if == test?

时间:2016-01-14 01:08:12

标签: macros jinja2

我使用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')}}

我看到&#34;类别:powertools;标题:电动工具&#34;和&#34;类别:av;标题:摄像机和录音机&#34;正如所料,所以我知道宏可以听到我,但列表本身并没有显示出来。我可以在比较测试中使用宏参数吗?怎么样?

1 个答案:

答案 0 :(得分:1)

在块内部不需要变量插值语法 - 您可以像在Python中一样按名称引用变量:

{# Do this #}
{% if row.Category == cat %}

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