首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mako还是Jinja2?

Mako还是Jinja2?
EN

Stack Overflow用户
提问于 2010-08-09 04:35:22
回答 2查看 35.1K关注 0票数 50

我没有找到jinja2和Mako的很好的比较。你会用什么来完成什么任务?

我个人对-or感到满意(在pylons web应用程序环境中),但我很好奇jinja2是否有一些mako没有的好特性/改进? mako可能有缺点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-09 05:14:16

我个人更喜欢JJAA2的语法而不是Mako的语法。

代码语言:javascript
运行
复制
<%inherit file="base.html"/>
<%
    rows = [[v for v in range(0,10)] for row in range(0,10)]
%>
<table>
    % for row in rows:
        ${makerow(row)}
    % endfor
</table>

<%def name="makerow(row)">
    <tr>
    % for name in row:
        <td>${name}</td>\
    % endfor
    </tr>
</%def>

这里有如此多的构造,以至于我必须在开始之前查阅文档。哪些标签以<%开头,以/>结尾?其中哪些是允许用%>关闭的?当我想要输出一个变量(${foo})时,为什么还有另一种输入模板语言的方法?这个伪XML是怎么回事,其中一些指令像标签一样接近,并且有属性?

这是Jinja2中的等效示例:

代码语言:javascript
运行
复制
{% extends "base.html" %}

<table>
  {% for row in rows %}
    {{ makerow(row) }}
  {% endfor %}
</table>

{% macro make_row(row) %}
  <tr>
    {% for name in row %}
      <td>{{ name }}</td>    
    {% endfor %}
  </tr>
{% endmacro %}

Jinja2有过滤器,我听说Mako也有,但我还没见过。过滤函数不同于常规函数,它们接受被过滤的值的隐式第一个参数。因此,在Mako中,您可以这样写:

代码语言:javascript
运行
复制
${escape(default(get_name(user), "No Name"))}

太可怕了。在Jinja2中,你可以这样写:

代码语言:javascript
运行
复制
{{ user | get_name | default('No Name') | escape }}

在我看来,Jinja2示例的可读性要好得多。JJIA2更有规则,因为标记以一种可预测的方式开始和结束,要么使用{% %}处理和控制指令,要么使用{{ }}输出变量。

但这些都是个人喜好。我不知道还有什么更重要的理由可以选择Jinja2而不是Mako,反之亦然。而Pylons是足够好的,你可以使用其中任何一个!

更新包含Jinja2宏。尽管在任何情况下都是人为设计的,但在我看来,Jinja2示例更容易阅读和理解。Mako的指导思想是"Python是一种很棒的脚本语言,不要重复发明wheel...your模板就可以处理它!“但是JJIA2的宏(实际上是整个语言)看起来更像是Python,而Mako是这样的!

票数 44
EN

Stack Overflow用户

发布于 2013-04-12 18:58:23

看一看wheezy.template示例:

代码语言:javascript
运行
复制
@require(user, items)
Welcome, @user.name!
@if items:
    @for i in items:
        @i.name: @i.price!s.
    @end
@else:
    No items found.
@end

它针对性能(更多的herehere)进行了优化,经过了良好的测试和记录。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3435972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档