首页 > 代码库 > jinja2 宏的简单使用总结(macro)
jinja2 宏的简单使用总结(macro)
Table of Contents
- 1. 简介
- 2. 用法
- 3. 参数和变量
- 4. 注意事项
- 4.1. macro的变量只能为如下三种:
- 4.2. 和block的关系:
- 5. 参考文档
1 简介
jinja2是python的模板引擎, 在写python web使用的过程中,发现macro可以节省大量的代码.所以做了一个小的总结.
用法基本上都是网上的文章. 自己主要是写了注意事项,也算是心得体会.
2 用法
宏类似常规编程语言中的函数。它们用于把常用行为作为可重用的函数,取代 手动重复的工作。 例子:
{% macro input(name, value=http://www.mamicode.com/‘‘, type=‘text‘, size=20) -%}"{{ type }}" name="{{ name }}" value="http://www.mamicode.com/{{" size="{{ size }}"> {%- endmacro %}
在命名空间中,宏之后可以像函数一样调用:
<p>{{ input(‘username‘) }}</p> <p>{{ input(‘password‘, type=‘password‘) }}</p>
如果宏在不同的模板中定义,你需要首先使用 import
{% from ‘base/macro/submit.macro‘ import test %}
3 参数和变量
varargs 如果有多于宏接受的参数个数的位置参数被传入,它们会作为列表的值保存在 varargs 变量上。 kwargs 同 varargs ,但只针对关键字参数。所有未使用的关键字参数会存储在 这个特殊变量中。 caller 如果宏通过 call 标签调用,调用者会作为可调用的宏被存储在这个 变量中。 宏也可以暴露某些内部细节。下面的宏对象属性是可用的: name 宏的名称。 {{ input.name }} 会打印 input 。 arguments 一个宏接受的参数名的元组。 defaults 默认值的元组。 catch_kwargs 如果宏接受额外的关键字参数(也就是访问特殊的 kwargs 变量),为 true 。 catch_varargs 如果宏接受额外的位置参数(也就是访问特殊的 varargs 变量),为 true 。 caller 如果宏访问特殊的 caller 变量且由 call 标签调用,为 true 。
4 注意事项
4.1 macro的变量只能为如下三种:
- 参数变量
- module变量
- call 的变量
这个和其他的语言比如c语言的macro是很大的不同. 你在模块中想让macro引用自身的变量是不能实现的.
4.2 和block的关系:
macro的出现,本质是想解决重复代码的问题. 和block相比,因为不能使用module中的参数,也就是说和block是 相辅相成的关系. 不存在互相覆盖的问题.
macro 的重心在于替换简单的重复性质的代码.
block 的重心在于重复框架代码的替换.
5 参考文档
模板设计者文档
内容来源:http://www.cnblogs.com/linuxhui/p/5804380.html
jinja2 宏的简单使用总结(macro)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。