zoukankan      html  css  js  c++  java
  • jinja2-宏,include, import

    一 宏

    宏类似常规编程语言中的函数。它们用于把常用行为作为可重用的函数,取代 手动重复的工作。如果宏在不同的模板中定义,你需要首先使用 import,比如

    {% macro input(name, value='', type='text', size=20) -%}
        <input type="{{ type }}" name="{{ name }}" value="{{
            value|e }}" size="{{ size }}">
    {%- endmacro %}

    在命名空间中,宏之后可以像函数一样调用:

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

    二 call宏和{{ caller() }}

    这里我们使用了”{% call %}”语句块来调用宏,语句块中包括了一段生成”Delete”按钮的代码。运行下试试,你会发现每个用户名后面都出现了”Delete”按钮,也就是”{{ caller( ) }}”部分被调用者”{% call %}”语句块内部的内容替代了。这个跟函数传个参数进去没啥大区别,主要是有些时候HTML语句太复杂(如上例),不方便写在调用参数上,所以就写在”{% call %}”语句块里了

    三 宏向调用者传递参数

    {% macro list_users(users) -%}
    <table>
    <tr><th>Name</th><th>Gender</th><th>Action</th></tr>
    {%- for user in users %}
    <tr><td>{{ user.name |e }}</td>{{ caller(user.gender) }}</tr>
    {%- endfor %}
    </table>
    {%- endmacro %}

    {% call(gender) list_users(users) %}

        <td>
        {% if gender == 'M' %}
        <img src="{{ url_for('static', filename='img/male.png') }}" width="20px">
        {% else %}
        <img src="{{ url_for('static', filename='img/female.png') }}" width="20px">
        {% endif %}
        </td>
        <td><input name="delete" type="button" value="Delete"></td>
    {% endcall %}
    在使用”{% call %}”语句时,将其改为了”{% call(gender) … %}”,这个括号中的”gender”就是用来接受宏里传来的”user.gender”变量。因此我们就可以在”{% call %}”语句中使用这个”gender”变量来判断用户性别。这样宏就成功地向调用者传递了参数
     
    四 宏的内部变量
    varargs 这是一个列表。如果调用宏时传入的参数多于宏声明时的参数,多出来的没指定参数名的参数就会保存在这个列表中
    kwargs 这是一个字典。如果调用宏时传入的参数多于宏声明时的参数,多出来的指定了参数名的参数就会保存在这个字典中
    name 宏的名称, {{ input.name }}
     
    五 宏的导入

    六 包含 (Include)

    使用的方法就是”{% include %}”语句。其功能就是将另一个模板加载到当前模板中,并直接渲染在当前位置上。它同导入”import”不一样,”import”之后你还需要调用宏来渲染你的内容,”include”是直接将目标模板渲染出来。它同block块继承也不一样,它一次渲染整个模板文件内容,不分块

    当”include”的模板文件不存在时,程序会抛出异常。你可以加上”ignore missing”关键字,这样如果模板不存在,就会忽略这段”{% include %}”语句。

    “{% include %}”语句还可以跟一个模板列表:

     
  • 相关阅读:
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    lambda表达式
    VIM--保存和退出等命令
  • 原文地址:https://www.cnblogs.com/sysnap/p/6558854.html
Copyright © 2011-2022 走看看