本章主题
关键词
宏
模板中的 宏 跟 Python 中的 函数 类似,可以 传递参数,但是 不能有返回值,可以将⼀些 经常⽤到 的 代码⽚段 放到宏中,然后把⼀些 不固定的值 抽取出来当成⼀个 变量。
{% macro input(name, value='', type='text') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}" >
{% endmacro %}
以上例⼦可以抽取出了⼀个 <input>
标签,指定了⼀些 默认参数。那么我们以后创建 <input>
标签的时候,可以通过他快速的创建:
<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p>
import语句
在真实的开发中,会将⼀些 常⽤的宏 单独 放在⼀个⽂件中,在需要使⽤的时候,再从这个⽂件中进⾏导⼊。
import
语句的⽤法跟 Python 中的 import
类似,可以直接 import...as...
,也可以 from...import...
或者 from...import...as...
。
假设现在有⼀个⽂件,叫做 forms.html
,⾥⾯有两个宏分别为 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 %}
导入宏的例子
import...as...
形式 :
{% import 'macro.html' as macro %}
<tr>
<td>⽤户名:</td>
<td>{{ macro.input('username') }}</td>
</tr>
from...import...as...
/from...import...
形式 :
{% from "macro.html" import input %} 2 <tr> 3 <td>密码:</td> 4 <td>{{ input("password",type="password") }}</td> 5 </tr>
另外需要注意的是,导⼊模板并不会把当前上下⽂中的变量添加到被导⼊的模 板中,如果你想要导⼊⼀个需要访问当前上下⽂变量的宏,有两种可能的⽅法:
- 显式地传⼊请求或请求对象的属性作为宏的参数;
- 与上下⽂⼀起(
with context
)导⼊宏。
与上下⽂中⼀起(with context
)导⼊的⽅式:
{% import 'macro.html' as macro with context %}
总结小便条
本篇文章主要讲了以下几点内容:
本章回顾暂时就到这了,如果还有点晕,那就把文章里所有引用的案例代码再敲几遍吧。拜拜~