如果您只想进行简单的字符串格式化,python 包括该str.format()
方法以及Template Strings。
直接来自文档
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'
如果您需要在模板中引入任何类型的逻辑,那么我会非常大胆地说,正确编写自己的代码会让您头疼,并且您会想要使用库。Jinja2是一个优秀的通用模板库。如果您曾经使用过 Django 的模板系统,那么使用起来会轻而易举,因为 Jinja2 是基于 Django 的。
我在 Jinja2 中使用过的一些代码
import jinja2
jinja2.env = jinja2.Environment(
loader=jinja2.PackageLoader(package_name=__name__,
package_path='templates'),
trim_blocks=True,
extensions=[
'jinja2.ext.with_', # add the with tag
],
)
context = {
'results': results,
'javascript': js,
'css': css,
'version': '.'.join(str(n) for n in __version__),
}
template = env.get_template('my_template.html')
rendered_template = template.render(context)
在 my_template.html
<html>
<head>
<title>Hello World</title>
<style>{{ css }}</style>
<script>{{ javascript }}</script>
</head>
<body>
<h1>Hello world</h1>
<ul>
{% for result in results %}
<div>
{{ result.winner_name }}<br />
{{ result.get_score() }}
</div>
{% endfor %}
</ul>
</body>
</html>
Django 模板和 Jinja2 模板之间的一个区别是 Jinja2 的理念不是让设计人员易于使用;因此,模板中允许函数调用。