我已经做了一些小十岁上下的Django项目,每一次我被Django的模板语言的局限性显而易见的袭击。正如随便举个例子,我感到非常震惊地得知,如果在一个模板的情况下,我有一个变量酒吧和字典FOO,我无法访问富[巴]除非我写我自己的过滤器来做到这一点。

我读过,这样做的原因是因为Django的是为环境创造了那里的人们设计的网页是不是程序员。我明白那个。

但是,让我们说这不是我的问题。是否有一个原因,我应该坚持Django的模板语言,而不是切换到的东西有很多更多的权力,像真子(在这里你甚至可以执行任意的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的社会并没有皱了皱眉头,没有任何人有任何建议?就像我说的,我真的很喜欢马可,但它是从字面上只有一个,我比Django的使用等。

有帮助吗?

解决方案

我会说实话,我并没有仔细阅读响应。但我猜这是一个很大的“在您的模板没有蟒蛇”和“您认为应该不会有太大的逻辑”式的东西。

如果你把理想放在一边,选择了实用主义那么我觉得真子是一个不错的选择。我在一家产能(主要针对速度,功耗和动态继承)现在3年以上使用。它不以任何方式失败或以其他方式烦人。

理想主义者是正确的,但有时你必须去什么是可行的VS什么是正确的。如果你没有被Django的模板引擎使用它的限制。如果你需要更多的力量,真子和神社都很好的选择。

Django的使得它很容易掉出来的模板引擎,并保持最事情作为工作之前: HTTP://docs.djangoproject。 COM / EN的/ dev / REF /模板/ API /#使用-AN-替代模板语言

其他提示

在模板中执行任意代码,不应该被认为是一种固有的好事。以这种功能的优势是通常一个迹象,表明您的体系结构被破坏。

这是说,如果你看过Django文档,它的明确的说,你应该感到自由使用,报废,并更换任何你想要的组件。 Django是故意模块化的,并且在事实上,这两个最平凡-可更换组件的模板引擎和ORM。

如果你想使用马可代替Django的模板引擎,只需要使用真子。

在一个原因,我想使用神社,真子或其他任何避免的是,它可能无法与Django的增强功能使您的应用程序面向未来。

有一个GSOC项目建议书,去年,由Alex盖纳,使模板加载快。 - 然后将缩回赞成的NoSQL项目的

但是,随着更多的核心开发者和更快的门票结算,我会坚持Django的完整的堆栈,完全明知,该部件必须由家庭长大的人最终变更为。

如果你真的找上真棒Python库,包括你选择的那些胶水框架,烧瓶那里

如果您确实意味着“应用程序”,而不是“项目”,这是不完全是私人使用,我建议您不要更改模板引擎;它会使应用程序不太可能永远被其他人使用,因为它会要求他们改变一些核心的设置,它可能会破坏它与其他应用程序或项目作为一个整体之间的互动。

您例子让我想起了老PHP天,当人们将在地方与HTML混合PHP所有。感觉真的很厉害。直到有一天,人们意识到的混乱是难以维护。

如果该设计斩“功能”,将一个设计师理解它呢?这可能会惹恼他。

scroll top