flask中jinjia2模板引擎使用详解5
接上文
宏
可以理解為函數(shù),即把一些常用的模板片段做好封裝,以便于重用,減少工作量和維護(hù)難度。
宏的定義很簡(jiǎn)單:
{%macro xxx()%}
##這里寫內(nèi)容
{%endmacro%}
下面引用官方的一個(gè)例子進(jìn)行說(shuō)明:
{% macro input(name, value='', type='text', size=20) -%}
<input type="{{ type }}" name="{{ name }}" value="{{
value|e }}" size="{{ size }}">
{%- endmacro %}
在content的block中進(jìn)行調(diào)用
<>{{?()?}}</> <>{{?(,?=)?}}</>運(yùn)行效果:
導(dǎo)入宏
我們可以把常用的宏放到一個(gè)文件中,然后在其它文件中引用,實(shí)現(xiàn)模塊化的管理。
我們新建一個(gè)form.html的文件,放入如下的代碼:
{%?(,?=,?=)?-%}<{{?}}{{?|}}{{?}}> {%-?%}{%-?(,?=,?=10,?=40)?-%}<{{?}}{{?}}{{?}}>{{?|}}</> {%-?%}在list.html中導(dǎo)入forms.html
{%?import?"forms.html"?as?forms%}調(diào)用方式:
<><>Username</><>{{?.()?}}</><>Password</><>{{?.(,?=)?}}</> </> <>{{?.()?}}</>運(yùn)行效果:
還有一種調(diào)用方式:
{%?from?'forms.html'?import?input?as?input_field,?textarea?%}宏調(diào)用
在某些情況下,需要把一個(gè)宏傳遞到另一個(gè)宏。為此,可以使用特殊的 call 塊。 下面的例子展示了如何讓宏利用調(diào)用功能:
代碼:
<h1>調(diào)用示例</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 by using a macro and
a call block.
{% endcall %}
運(yùn)行效果:
Call塊其實(shí)是一種特殊的宏,我們可以叫它為匿名宏,就是沒(méi)有命名的函數(shù),函數(shù)當(dāng)然就可以有參數(shù),下面還是以一個(gè)例子來(lái)說(shuō)明一下帶參數(shù)的call模塊的使用方式。
<h1>帶參數(shù)的宏</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 %}
運(yùn)行效果:
本文源代碼:鏈接:https://pan.baidu.com/s/1BD6pESSwW8SoRHKe66P8Dw 密碼:ur6u?
轉(zhuǎn)載于:https://blog.51cto.com/12482328/2083998
總結(jié)
以上是生活随笔為你收集整理的flask中jinjia2模板引擎使用详解5的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Mysql入门实战中
- 下一篇: PostgreSQL的那点事儿