3

我做过一些小型的 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 的。

4

6 回答 6

4

老实说,我没有仔细阅读回复。但我猜这是很多“模板中没有python”和“你的视图不应该有太多逻辑”类型的东西。

如果你抛开理想主义而选择实用主义,那么我认为 Mako 是一个不错的选择。我在生产能力中使用它(主要是为了速度、功率和动态继承)已经 3 年多了。它没有以任何方式失败或令人讨厌。

理想主义者是正确的,但有时您必须选择可行与正确。如果您不受 Django 模板引擎的限制,请使用它。如果您需要更多动力,Mako 和 Jinja 是不错的选择。

Django 可以很容易地更换模板引擎并让大多数事情像以前一样工作:http: //docs.djangoproject.com/en/dev/ref/templates/api/#using-an-alternative-template-language

于 2010-11-22T20:44:54.777 回答
3

在模板中执行任意代码不应被视为天生的好事。利用此类功能通常表明您的架构已损坏。

也就是说,如果您阅读 Django 文档,它明确表示您应该随意使用、丢弃和替换您想要的任何组件。Django 是有意模块化的,事实上,两个最容易替换的组件是模板引擎和 ORM。

如果你想使用 Mako 而不是 Django 模板引擎,只需使用 Mako。

于 2010-11-22T02:56:43.050 回答
2

The one reason I'd refrain from using jinja, Mako or anything else is that it may not make your app future proof with django enhancements.

There was a GSoc project proposal last year, by Alex Gaynor to make the template loading fast. - It was then retracted in favor of NoSQL project.

But with many more core developers and faster clearing of tickets, I'd stick to django full stack, knowing fully well, that components have to be changed to by home grown ones eventually.

If you are really looking for a glue framework on awesome python libraries, including the ones you choose, Flask is out there.

于 2010-11-22T07:27:42.387 回答
1

addons.mozilla.org 正在使用 Django + Jinga:https ://github.com/jbalogh/zamboni

不确定社区是否对 Jinga 不满意,但很多人喜欢它,例如。

于 2010-11-22T02:56:16.257 回答
0

如果您的意思是“应用程序”而不是“项目”,并且它不是完全私人使用的,我建议您不要更改模板引擎;这将使该应用程序被其他任何人使用的可能性大大降低,因为它需要他们更改一些核心设置,并且可能会破坏它与其他应用程序或整个项目之间的交互。

于 2010-11-22T03:19:15.767 回答
0

您的示例让我想起了过去人们将 PHP 与 html 混合在一起的 PHP 时代。感觉真的很强大。直到有一天,人们意识到这个烂摊子是无法维护的。

如果设计被分割成“功能”,那么设计师会理解吗?恐怕会惹恼他。

于 2010-11-22T03:37:22.267 回答