Jinja2安装与基本API用法

简介

    Jinja2是用于Python的库,旨在灵活,快速且安全地运行。

前提条件

    Jinja2适用于Python 2.6.x,2.7.x和> = 3.3。如果您使用的是Python 3.2,则可以使用旧版的Jinja2(2.6),因为Jinja2版本2.7中已不再支持Python 3.2。
    如果希望使用PackageLoader该类,则还需要在运行时安装setuptoolsdistribute

安装

    您可以使用easy_install或pip安装最新的Jinja2版本:

easy_install Jinja2
pip install Jinja2

    也可以从tarball分发包中获取:

  1. 下载页面下载最新tarball
  2. 打开压缩包;
  3. python setup.py install

    请注意,您必须具有setuptools或distribute。优选选择后者。

基本API用法

    简要介绍Jinja2模板的Python API。
    创建和渲染模板的最基本方法是通过Template。但是,如果不是从字符串而是从文件系统或其他数据源中加载模板,则不建议使用此方法。


>>> from jinja2 import Template
>>> template = Template('Hello {{ name }}!')
>>> template.render(name='John Doe')
'Hello John Doe!'

    通过创建Template实例,您将获得一个新的模板对象,该对象提供了一种称为render()的方法,该方法在使用字典或关键字参数调用时将扩展该模板。传递给模板的字典或关键字参数是模板所谓“上下文”。
您可以在此处看到Jinja2在内部使用unicode,返回值为一个unicode字符串。因此,请确保您的应用程序确实在内部使用unicode。

API

基础

    Jinja2使用一个称为模板环境(template Environment)的中心对象。此类的实例用于存储配置和全局对象,并用于从文件系统或其他位置加载模板。即使使用Template类的构造函数从字符串创建模板,也会自动为您创建一个环境(尽管是共享的环境)。
    大多数应用程序将在应用程序初始化时创建一个Environment对象,并使用该对象来加载模板。但是,在某些情况下,如果使用不同的配置,并排放置多个环境会很有用。
    配置Jinja2为应用程序加载模板的最简单方法大致如下:

from jinja2 import Environment, PackageLoader, select_autoescape
env = Environment(
    loader=PackageLoader('yourapplication', 'templates'),
    autoescape=select_autoescape(['html', 'xml'])
)

    这将创建一个具有默认设置的模板环境和一个加载程序,该加载程序在yourapplication python包的templates文件夹中查找模板。如果要从数据库或其他资源加载模板,可以使用不同的加载程序,也可以编写自己的加载程序。这还支持HTML和XML文件的自动转义(Autoescaping)。
    要从此环境加载模板,您只需调用 get_template() 方法,然后返回已加载的Template:

template = env.get_template('mytemplate.html')

    要使用一些变量呈现它,只需调用render()方法:

print(template.render(the='variables', go='here'))

    使用模板加载器而不是将字符串传递到Template 或者 Environment.from_string() 具有多个优点。除了易于使用之外,它还支持模板继承。

Unicode

    Jinja2在内部使用Unicode,这意味着您必须将Unicode对象传递给只包含ASCII字符的render函数或byte字符串。另外,换行符被规范化为一个行尾,该行尾符合默认的UNIX样式(\n)。
    Python 2.x支持两种表示字符串对象的方式。一个是 str 类型,另一个是unicode 类型,两者都扩展了一个称为 basestring 的类型。不幸的是,除非使用ASCII字符,否则默认值 str 不应用于存储基于文本的信息。
    使用Python 2.6可以在每个模块级别将unicode设置为默认值,使用Python 3,unicode为默认值。
    要设置更好的模块编码,请使用Unicode文本将以下注释添加到Python模块的第一行或第二行:

# -*- coding: utf-8 -*-

    我们建议将utf-8用作Python模块和模板的编码,因为它可以表示utf-8中的每个Unicode字符,并且因为它向后兼容ASCII。
    另一个重要的事情是Jinja2如何处理模板中的字符串文字。一个幼稚的实现将对所有字符串文字使用Unicode字符串,但是在过去发现这是有问题的,因为某些库正在显式地对str进行类型检查。例如, datetime.strftime不接受Unicode参数。为了不完全破坏它,Jinja2 将为适合ASCII的字符串以及所有其他unicode返回str。

高级API

    高级API是您将在应用程序中用来加载和呈现Jinja2模板的API。另一方面,低级API(Low Level API)仅在您想更深入地研究Jinja2或开发扩展时才有用。
    翻译到这里,感觉我根本没有把python学明白。Jinja2的学习和翻译暂时停止。我先把python深入学习一下。
在这里插入图片描述

参考文档

https://jinja.palletsprojects.com/en/2.10.x

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值