Python笔记(Jinja2)

本文是基于Jinja2中文手册,以及 Jinja2 简明使用手册所做的笔记。

1 Jinja2

Jinja2是基于python的模板引擎,之前在编写廖雪峰的web开发的时候接触过,在Day5以及Day8都有涉及到。

1.1 Environment

Environment是Jinja2中的一个核心类,它的实例用来保存配置全局对象,以及文件路径用于加载模板。
配置Jinja2来为应用添加模板的步骤大致是:

  • 创建Environment实例
  • 使用get_template()加载模板
  • 使用render()方法来渲染模板

1.1.1 创建Environment实例

现在结合廖雪峰的web开发实战一同说明,在Day5构建web框架的时候就有初始化Jinja2模板,这步骤就相当于创建Environment实例,创建Environment实例需要接受主要参数有(基本都有默认值):

  • loader:模板加载器,形式是loader=FileSystemLoader(path),其中的path表示的是模板的文件路径。
  • block_start_string:模块开始标记符,默认值{%
  • block_end_string:模块结束标记符,默认值%}
  • variable_start_string:变量开始标记符,默认值{ {
  • variable_end_string:变量结束标记符,默认值}}
  • auto_reload:是一个布尔值,如果设定为True,则当模板发生改动时会自动重载
  • autoescape:是一个布尔值,默认值为False,如果设置为True,在渲染模板时,会自动将模板转义实体字符,此时使用safe过滤器可以使不需转义的渲染变量不转义,如{ { user.username|safe }}
  • filters:过滤器,多数用于渲染变量标记符的时候,在渲染模板时其语法形式是{ {args|function}}(结合day8中的时间过滤器)。过滤器不是创建Environment实例的参数,它是以方法的形式绑定在Environment实例上,如Env.filters[FunctionName]=function

1.1.2 get_template()加载模板,render()方法来渲染模板

在创建好Environment实例后,可以使用其get_template(templateName)方法来加载模板,再使用render(**dict)渲染模板(通俗点就是变量代入),注意这是一个链式env.get_template(templateName).render(**dict),可以结合day5中的middleware factory中的代码。

1.2 结构控制标记

在Jinja2模板中渲染的目标以结构控制标记符来定义,结构标记符基本有以下几种:

  • { { variable }}:用于直接替换传入数据
  • {% extends '__base__.html' %}:用于子模板继承父模板
  • {% block blockName %}...{% endblock %}:用于父模板与子模版之间的渲染,注意blockName的命名必须是唯一的
  • {% if boolean %}...{% elseif boolean %}...{% else %}...{% endif %}:条件判断标记
  • {% for item in items %}:循环控制标记
  • {% marco function(x) %}..function..{% endmarco %}:宏,用于定义函数,此后该模板任意部位都可以直接调用functon(x),如

    { {function(123)}}

转载于:https://www.cnblogs.com/AB786883603/p/8325396.html

你可能感兴趣的:(python)