flask中jinjia2模板引擎使用详解5

接上文

可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度。

宏的定义很简单:

{%macroxxx()%}

##这里写内容

{%endmacro%}

下面引用官方的一个例子进行说明:

{% macro input(name, value='', type='text', size=20) -%}

    type="{{ type }}" name="{{ name }}" value="{{value|e }}" size="{{ size }}">

{%- endmacro %}

在content的block中进行调用

<p>{{ input('username') }}p>

<p>{{ input('password', type='password') }}p> 

运行效果:

 

导入宏

我们可以把常用的宏放到一个文件中,然后在其它文件中引用,实现模块化的管理。

我们新建一个form.html的文件,放入如下的代码:

{% macro input(name, value='', type='text') -%}

    <input type="{{ type }}" value="{{ value|e }}" name="{{ name }}">

{%-endmacro %}

{%-macro textarea(name, value='', rows=10, cols=40) -%}

    <textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols}}">{{ value|e }}textarea>

{%-endmacro %}

在list.html中导入forms.html

{% import "forms.html" as forms%}

调用方式

<dl>

    <dt>Usernamedt>

    <dd>{{ forms.input('username') }}dd>

    <dt>Passworddt>

    <dd>{{ forms.input('password', type='password') }}dd>

</dl>

<p>{{ forms.textarea('comment') }}p>

运行效果:

 

还有一种调用方式:

{% from 'forms.html' importinputasinput_field,textarea%}

宏调用

在某些情况下,需要把一个宏传递到另一个宏。为此,可以使用特殊的call块。下面的例子展示了如何让宏利用调用功能:


代码:

<h1>调用示例h1>

{%macro render_dialog(title, class='dialog') -%}

    <div class="{{ class }}">

        <h2>{{ title }}h2>

        <div class="contents">

            {{caller() }}

        </div>

    </div>

{%-endmacro %}

{%call render_dialog('Hello World') %}

    This is a simple dialog rendered byusing a macro and

    a call block.

{%endcall %}

运行效果:


Call块其实是一种特殊的宏,我们可以叫它为匿名宏,就是没有命名的函数,函数当然就可以有参数,下面还是以一个例子来说明一下带参数的call模块的使用方式。<h1>带参数的宏h1>

{%macro dump_users(users) -%}

    <ul>

        {%-for user in users %}

            <li><p>{{ user|e }}p>{{ caller(user) }}li>

        {%-endfor %}

    </ul>

{%-endmacro %}

{%call(user) dump_users(users) %}

    <dl>

        <dl>姓名dl>

        <dd>{{ user|e }}dd>

    </dl>

{%endcall %}

运行效果:


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 Jinja是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker...
    ZhouLang阅读 8,007评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,008评论 0 38
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,256评论 19 139
  • 在八卦绿色性格之前,先给绿色们道个歉,中间的几篇文章将绿色晾了许久,本打算一口气分期将四种颜色写完,一方面可以回顾...
    AM爱梦阅读 380评论 0 0
  • 大概上次见你是在一年多前。 你藏在人潮里,那么不起眼。 在一天天的消耗之后沉默。渐渐溺死在沉沉的湖水里。 死后时间...
    啊琥酱阅读 353评论 0 0