我做过一些小型的 Django 项目,每次我都被 Django 模板语言的明显局限性所震撼。作为一个随机的例子,我很震惊地得知,如果在模板的上下文中,我有一个变量 bar 和一个 dict foo,除非我编写自己的过滤器来执行它,否则我无法访问 foo[bar]。
我读过这是因为 Django 是为设计页面的人不是程序员的环境创建的。我明白那个。
但是,假设这对我来说不是问题。有什么理由让我坚持使用 Django 的模板语言,而不是切换到功能更强大的东西,比如 Mako(你甚至可以执行任意 Python 表达式)?
不久前我有机会将 Mako 用于学校项目,我真的很喜欢它的力量。例如,作为项目的一部分,我们必须制作一个大表格,其中构建每一行和单元格相当复杂。然而,我可以让我的模板看起来像:
<table>
% for foo in foos:
${makerow(row)}
% endfor
</table>
<%def name="makerow(row)">
<tr>
# Blah blah blah (possibly a call to makecell somewhere)
</tr>
</%def>
也许这违反了表示和逻辑的分离,但男孩是不是又好又干净。子程序!抽象!好东西。
还有一个后续问题:如果 Django 社区不反对使用替代模板语言,那么有人有什么建议吗?就像我说的,我真的很喜欢 Mako,但它实际上是我使用过的唯一一个除了 Django 的。