[英]Custom templates in python
我正在尝试在python中实现自定义模板格式以完成两件事
Django喜欢分隔符
{{占位符}}
例如。
from string import Template
class MyTemplate(Template):
delimiter="{{..}}" #it is only for clarification purpose, though it is invalid
mt = MyTemplate("HELLO {{ world }}")
mt.substitute(world="WORLD")
如果存在键错误或值错误,请跳过该标识符。
class MyTemplate(Template):delimiter =“ {{..}}”“#仅用于说明目的
data =“ HELLO {{world}},这是第一个程序{{program}}”
mt = MyTemplate(数据)
mt.substitute(世界= “WORLD”)
那么o / p应该是
HELLO WORLD, this is 1st program
据我所知,我们可以使用诸如jinja2之类的模板引擎,但这是我的最后选择。 我更喜欢使用python本地库来做到这一点。
虽然如果您想建议任何模板引擎(如果可能,并带有示例),那么它也将是不错的。
提前致谢。
如果您只想做简单的字符串格式化,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。
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)
<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的理念不是要使设计人员易于使用。 因此,允许在模板内进行函数调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.