Jinja2:模板内未调用宏

问题描述 投票:0回答:1

在index.html中,就在调用几篇博客文章的for循环之前,我定义了一个在这些文章中使用的宏:

<div class="content">

  {% macro image(source, caption) %}
    <a href="{{ source }}">
      <img src="{{ source }}" alt="{{ caption }}">
    </a>
    <p class="caption">{{ caption }}</p>
  {% endmacro %}
  
  {% block content %}

      {% for post in content['posts'][-5:] %}
          <article>
          <a class="heading" href="{{ post['link'] }}">
              <h2>{{ post['title'] }}</h2>
          </a>
          <p class="date">{{ post['date'] | prettydate }}</p>
          {{ post['body']}}
          <hr class="post">
      {% endfor %}
  {% endblock content %}

这些帖子是带有 HTML 代码的模板文件。在那里,我这样称呼这个宏:

{{ image('/content/img/image.jpg', 'My Picture') }}

我原本期望使用宏来渲染它,但事实并非如此。上面的表达式按原样呈现,而不是带有标题的图片。

有人可以告诉我我在这里缺少什么吗?

macros jinja2
1个回答
0
投票

上面不起作用的原因是因为

post['body']
从未通过 Jinja 的渲染器本身传递。为了实现这一点,我可以自己调用渲染的:

macro = """
    {% macro image(source, caption) %}
        <a href="/content/img/{{ source }}">
            <img src="/content/img/{{ source }}" alt="{{ caption }}">
        </a>
        <p class="caption">{{ caption }}</p>
    {% endmacro %}
"""

template = Template(macro+post['body'])
post['body'] = template.render()
© www.soinside.com 2019 - 2024. All rights reserved.