【问题标题】:Custom widgets: The equivalent of Mako's <%def> in Jinja2 or Django templates自定义小部件:相当于 Jinja2 或 Django 模板中 Mako 的 <%def>
【发布时间】:2021-12-28 14:43:28
【问题描述】:

我非常精通 Mako,但从未真正使用过 Jinja 或 Django 模板。

Mako &lt;%def name="..."&gt; 定义的 Jinja/Django 等价物是什么?

以下是我的实际用例的简化示例。我需要定义一个简单的表格,并在页面上反复使用:

<%def name="temperature_table(north, east, south, west)">
    <table>
        <tr>
            <td>North:</td>
            <td>${north}</td>
        </tr>
        <tr>
            <td>East:</td>
            <td>${east}</td>
        </tr>
        <tr>
            <td>South:</td>
            <td>${south}</td>
        </tr>
        <tr>
            <td>West:</td>
            <td>${west}</td>
        </tr>
    </table>
</%def>

<h2>Morning</h2>
${weather_table(20, 21, 22, 23)}

<h2>Afternoon</h2>
${weather_table(22, 22, 25, 24)}

<h2>Night</h2>
${weather_table(17, 16, 17, 18)}

从我从各种文章中收集到的信息来看,blocks 似乎在 Jinja/Django 中用于此目的。但是即使是自定义小部件就足够的简单模板,块也会引入继承。其他作者建议创建自定义标签,但在我看来,这需要编写自定义解析、渲染,甚至可能需要自定义缓存管理功能。我错过了什么吗?

【问题讨论】:

    标签: django-templates jinja2 mako


    【解决方案1】:

    您可以为此使用macro

    如手册所述:

    宏可与常规编程语言中的函数相媲美。它们有助于将常用习语放入可重用函数中,以免重复自己(“DRY”)。

    来源:https://jinja.palletsprojects.com/en/3.0.x/templates/#macros

    所以,给定:

    {% macro weather_table(north, east, south, west) -%}
      <table>
          <tr>
              <td>North:</td>
              <td>{{ north }}</td>
          </tr>
          <tr>
              <td>East:</td>
              <td>{{ east }}</td>
          </tr>
          <tr>
              <td>South:</td>
              <td>{{ south }}</td>
          </tr>
          <tr>
              <td>West:</td>
              <td>{{ west }}</td>
          </tr>
      </table>
    {%- endmacro %}
    
    <h2>Morning</h2>
    {{ weather_table(20, 21, 22, 23) }}
    
    <h2>Afternoon</h2>
    {{ weather_table(22, 22, 25, 24) }}
    
    <h2>Night</h2>
    {{ weather_table(17, 16, 17, 18) }}
    

    它呈现您预期的表格。

    <h2>Morning</h2>
    <table>
      <tr>
        <td>North:</td>
        <td>20</td>
      </tr>
      <tr>
        <td>East:</td>
        <td>21</td>
      </tr>
      <tr>
        <td>South:</td>
        <td>22</td>
      </tr>
      <tr>
        <td>West:</td>
        <td>23</td>
      </tr>
    </table>
    
    <h2>Afternoon</h2>
    <table>
      <tr>
        <td>North:</td>
        <td>22</td>
      </tr>
      <tr>
        <td>East:</td>
        <td>22</td>
      </tr>
      <tr>
        <td>South:</td>
        <td>25</td>
      </tr>
      <tr>
        <td>West:</td>
        <td>24</td>
      </tr>
    </table>
    
    <h2>Night</h2>
    <table>
      <tr>
        <td>North:</td>
        <td>17</td>
      </tr>
      <tr>
        <td>East:</td>
        <td>16</td>
      </tr>
      <tr>
        <td>South:</td>
        <td>17</td>
      </tr>
      <tr>
        <td>West:</td>
        <td>18</td>
      </tr>
    </table>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 2014-08-11
      • 2012-06-14
      • 2017-10-31
      • 2016-08-02
      • 2011-06-12
      • 2011-06-05
      相关资源
      最近更新 更多