如何在 Python 中像 ERB 一样进行模板化?
How to template like ERB in Python?
ERB,如果您不熟悉它,它是 Ruby 在 Rails 和许多其他 Ruby 项目中使用的模板语言。简而言之,它允许您评估 HTML 模板中的原始 ruby 代码并呈现结果。
考虑以下因素:
#hello.erb
<html>
<body>
<p>Hello, <%= @name %></p>
</body>
<html>
Ruby 实例变量@name 将被替换并呈现到用户看到的页面上。
现在,Python 有一种称为 Jinja2 的通用模板语言,它的工作方式几乎相同(主要使用 {{ }}
s 而不是 <% %>
s),但两者之间有一个巨大的区别:
ERB 允许您使用 任何 有效的 Ruby 代码,而 Jinja2 只有非常有限的 Python-esque 语言子集,但不是原始的Python.
问题:
如何使用整个语言而不是有限的子集将 HTML 与 Python 模板化?
Mako 允许编写一个规则的 Python 代码块,像这样
this is a template
<%
x = db.get_resource('foo')
y = [z.element for z in x if x.frobnizzle==5]
%>
% for elem in y:
element: ${elem}
% endfor
http://docs.makotemplates.org/en/latest/syntax.html#python-blocks
ERB,如果您不熟悉它,它是 Ruby 在 Rails 和许多其他 Ruby 项目中使用的模板语言。简而言之,它允许您评估 HTML 模板中的原始 ruby 代码并呈现结果。
考虑以下因素:
#hello.erb
<html>
<body>
<p>Hello, <%= @name %></p>
</body>
<html>
Ruby 实例变量@name 将被替换并呈现到用户看到的页面上。
现在,Python 有一种称为 Jinja2 的通用模板语言,它的工作方式几乎相同(主要使用 {{ }}
s 而不是 <% %>
s),但两者之间有一个巨大的区别:
ERB 允许您使用 任何 有效的 Ruby 代码,而 Jinja2 只有非常有限的 Python-esque 语言子集,但不是原始的Python.
问题:
如何使用整个语言而不是有限的子集将 HTML 与 Python 模板化?
Mako 允许编写一个规则的 Python 代码块,像这样
this is a template
<%
x = db.get_resource('foo')
y = [z.element for z in x if x.frobnizzle==5]
%>
% for elem in y:
element: ${elem}
% endfor
http://docs.makotemplates.org/en/latest/syntax.html#python-blocks