Jinja2学习笔记暨官方文档的翻译
Posted goosman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jinja2学习笔记暨官方文档的翻译相关的知识,希望对你有一定的参考价值。
呵呵, 刚刚看完Python模板引擎Jinja2的文档, 感觉很好, 觉得动态语言真是很好. 模板引擎竟然可以做的如此灵活....真是不错....
下面直接把看文档过程的笔记发布出来, 呵呵, 基本上就是翻译, 加了不多的一点自己的解释......希望可以帮到大家
补充:
1. 在模板中设置自定义变量:
% set variable_name = value %
比如设置% set username = 'Jack' %
那么在设置之后就可以使用 username 得到输出Jack
section 1 API
1 jinja2的Hello world:
import jinja2 as jj
template = jj.Template(‘Hello where’)
template.render(where = ‘World’)
2 基础:
2.1 jinja2中有一个核心对象: template Environment(模板环境), 这个类的实例被用于存储配置信息, 全局对象, 从文件系统或其他位置加载模板, 甚至如果你使用Template的构造器创建一个String类型的模板的时候, 也会自动的创建一个Environment对象.
2.2 Environment一般在一个应用中只创建一个, 当系统中有不同的配置需求的时候, 就需要创建多个Environment对象相互支持.
2.3 创建一个Environment对象: env = Environment(loader = FileSystemLoader(‘templates’))…意思是创建一个template Environment对象, 使用的加载器loader是FileSystemLoader类型, 可以加载的模板是当前工作目录下的templates目录下的模板文件.
2.4 加载一个模板: template = env.get_template(‘mytemplate.txt’), 使用env的模板环境加载名为mytemplate.txt的模板文件.
2.5 渲染一个模板: template.render(name = ‘Jack’), 渲染模板template, 传入了模板参数name值为Jack
3 高级api
3.1 class Environment(block_start_string = ‘%’, block_end_string = ‘%’, variable_start_string = ‘’, variable_end_string = ‘’, comment_start_string = ‘#’, comment_end_string = ‘#’, line_statement_prefix = None, trim_blocks = False, extensions = (), optimized = True, undefined = <class ‘jinja2.runtime.Undefined’>, finalize = None, autoescape = False, loader = None, cache_size = 50, auto_reload = True): 下面单独列出的属性解释不都是构造器中的参数
3.1.1 block_start_string = ‘%’, block_end_string = ‘%’, variable_start_string = ‘’, variable_end_string = ‘’, comment_start_string = ‘#’, comment_end_string = ‘#’用来定义块, 变量, 注释的开始和结束标记.
3.1.2 line_statement_prefix: 单行语句前缀
3.1.3 trim_blocks: 布尔值, 块后面的第一行将会被移除(块, 非变量标签), 默认是False
3.1.4 extensions: Jinja的扩展对象列表, 可以是导入路径的字符串或扩展类
3.1.5 optimized: 布尔值, 表明优化是否允许.
3.1.6 undefined: jinja2.runtime.Undefined或其子类的实例, 用来描绘模板中的值为undefined的变量
3.1.7 finalize: 一个可调用对象, 用来最终确定一个变量, 默认使用apply, 需要html转码时可以设置为escape
3.1.8 autoescape: 设置为true就打开了XML/HTML的自动escape功能
3.1.9 cache_size: 缓存大小, 默认50, 意思是如果有超过50个模板被加载器加载, 就会清理刚刚使用过的模板. 如果设置为0, 表示所有的模板都会被重编译, 也就是不使用缓存, 如果设置为-1, 表示缓存不会被清理.
3.1.10 auto_reload: 如果模板的文件发生了变化, 加载器会重新编译该模板进行加载.
3.1.11 shared: 使用Template的构造器创建一个模板的时候, 会自动的创建一个Environment对象, 这个Environment对象就是一个共享的Environment对象, 很多模板都共享着同一个匿名Environment对象, 对于共享Environment对象而言, shared属性为True, 其他情况都是False
3.1.12 sandboxed: SandboxedEnvironment的实例对象此属性为True
3.1.13 filters: 一个字典描述的filters过滤器集合, 如果非模板被加载的时候, 可以安全的添加filters或移除较早的.
3.1.14 tests: 一个字典描述的测试函数集合, 如果非模板被加载, 可以安全的修改这个字典.
3.1.15 globals: 一个字典描述的全局变量集合, 这些变量可以在所有的模板中使用, 并且不能被模板重写(如果optimizer设置为允许). 如果非模板被加载, 它可以安全的修改这个字典.
3.1.16 from_string(source, globals = None, template_class = None): 从一个字符串加载一个模板, 将source指定的字符串转换成一个模板对象. 该方法是一个实例方法
3.1.17 join_path(template, parent): 不知道用途. 联接一个模板和父模板. 通过默认的查找查找关联的根, 这个方法返回没有修改过的template参数, 但是, 如果paths可以随父模板改变, 这个函数就可以用来得到模板的真实名称.(模板父名称+模板名称???), 子类可以重写这个方法实现自己的模板路径联接
3.1.18 get_template(name, parent = None, globals = None): 加载一个模板, 如果parent参数不是None, 会调用join_path()方法得到模板的真实名称在加载之前. 如果加载器配置了这个方法就会加载name指定的模板. globals参数用来提供编译时的全局模板参数, 未来可能会允许优化的渲染templates的部分在编译时……….编译不允许有TemplateNotFound异常
3.1.19 overlay(block_start_string = missing, block_end_string = missing, variable_start_string = missing, variable_end_string = missing, comment_start_string = missing, comment_end_string = missing, line_statement_prefix = missing, trim_blocks = missing, extensions = missing, optimized = missing, undefined = missing, finalize = missing, autoescape = missing, loader = missing, cache_size = missing, auto_reload = missing): 获取一个新的Environment, 该对象继承获得所有当前Environment对象的配置属性, 调用此方法传递的参数会覆盖原有的配置属性.
3.2 class Template(): 核心的模板对象, 用来提供使用构造器创建模板对象, 构造器参数和Environment的相同, 但是不能提供loader, 使用构造器创建的模板对象有一个临时的Environment对象, 这个对象和所有其他使用构造器创建的Template共享. 下面介绍Template中的主要成员:
3.2.1 globals: 模板中使用的全局变量???
3.2.2 name: 返回加载模板时指定的名称(如果是FileSystemLoader加载的, 会返回文件名.)
3.2.3 render(*args, **kwargs): 接受关键字参数或字典作为参数. 返回渲染模板的结果字符串
3.2.4 stream(*args, **kwargs): 接受参数同上, 返回一个TemplateStream对象, TemplateStream做类似生成器的工作.
3.2.5 generate(*agrs, **kwargs): 对于很大的模板, 使用generate接口并不会一次渲染整个模板, 而是返回一个生成器, 每次next的时候, 使用yield方式生成一个模板片段.
3.2.6 module: 是一个TemplateModule对象, 该对象对用于运行时导出模板变量.例如:
t = Template(“% macro foo() %42% endmacro %”)
t.module.foo()就会返回42
3.2.7 make_module(vars = None, shared = False): 不传递参数相当于module属性. 传递参数功能未知.
3.3 class TemplateStream(gen): 一个模板流, 和python的生成器工作原理基本相同, 但是, 这里可以通过更多项的缓存, 以减少迭代次数., 默认是不支持缓存的, 可以通过enable_buffering()开启缓存
3.3.1 disable_buffering(): 展示输出缓存
3.3.2 enable_buffering(size = 5): 开启缓存, 缓存的项数默认是5, 缓存发生的时机在yielding之前
4 Undefined Types: Environment的构造器中提供了设置接口, 如果在模板中查找不到一个名称或不能访问一个属性的时候, 就会创建一个Undefined对象并返回.
4.1 class Undefined(hint = None, obj = None, name = None): 默认的Undefined类型, 以上是关于Jinja2学习笔记暨官方文档的翻译的主要内容,如果未能解决你的问题,请参考以下文章