宏和import語句
宏:
模板中的宏跟python中的函數(shù)類似,可以傳遞參數(shù),但是不能有返回值,可以將一些經(jīng)常用到的代碼片段放到宏中,然后把一些不固定的值抽取出來當(dāng)成一個(gè)變量,以下將用一個(gè)例子來進(jìn)行解釋:
{% macro input(name, value='', type='text') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value|e }}">
{% endmacro %}
以上例子可以抽取出了一個(gè)input標(biāo)簽,指定了一些默認(rèn)參數(shù)。那么我們以后創(chuàng)建input標(biāo)簽的時(shí)候,可以通過他快速的創(chuàng)建:
<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p>
import語句:
在真實(shí)的開發(fā)中,會(huì)將一些常用的宏單獨(dú)放在一個(gè)文件中,在需要使用的時(shí)候,再從這個(gè)文件中進(jìn)行導(dǎo)入。import語句的用法跟python中的import類似,可以直接import...as...,也可以from...import...或者from...import...as...,假設(shè)現(xiàn)在有一個(gè)文件,叫做forms.html,里面有兩個(gè)宏分別為input和textarea,如下:
forms.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 %}
導(dǎo)入宏的例子:
-
import...as...形式:{% import 'forms.html' as forms %} <dl> <dt>Username</dt> <dd>{{ forms.input('username') }}</dd> <dt>Password</dt> <dd>{{ forms.input('password', type='password') }}</dd> </dl> <p>{{ forms.textarea('comment') }}</p> -
from...import...as.../from...import...形式:{% from 'forms.html' import input as input_field, textarea %} <dl> <dt>Username</dt> <dd>{{ input_field('username') }}</dd> <dt>Password</dt> <dd>{{ input_field('password', type='password') }}</dd> </dl> <p>{{ textarea('comment') }}</p>
另外需要注意的是,導(dǎo)入模板并不會(huì)把當(dāng)前上下文中的變量添加到被導(dǎo)入的模板中,如果你想要導(dǎo)入一個(gè)需要訪問當(dāng)前上下文變量的宏,有兩種可能的方法:
- 顯式地傳入請求或請求對象的屬性作為宏的參數(shù)。
- 與上下文一起(with context)導(dǎo)入宏。
與上下文中一起(with context)導(dǎo)入的方式如下:
{% from '_helpers.html' import my_macro with context %}
如果想深入學(xué)習(xí)Flask,可以觀看這套免費(fèi)Flask教學(xué)視頻:Flask入門到項(xiàng)目實(shí)戰(zhàn)
</article>
版權(quán)聲明: https://blog.csdn.net/huangyong1314/article/details/74652664