- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我没有找到 jinja2 和 Mako 的一个很好的比较。你会用什么来完成什么任务?
我个人对 mako(在 pylons 网络应用程序环境中)感到满意,但我很想知道 jinja2 是否有一些 mako 没有的不错的功能/改进? - 或者可能是缺点?-
最佳答案
我个人更喜欢 Jinja2 的语法而不是 Mako 的语法。以 Mako website 中的这个例子为例
<%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}
)时,为什么还有另一种输入模板语言的方法?这个 faux XML 中的某些指令像标签一样关闭并具有属性,这是怎么回事?
这是 Jinja2 中的等效示例:
{% 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 中,您可能会这样写:
${escape(default(get_name(user), "No Name"))}
这太可怕了。在 Jinja2 中你会写:
{{ user | get_name | default('No Name') | escape }}
在我看来,Jinja2 示例的可读性非常好。 Jinja2 更常规,因为标签以可预测的方式开始和结束,可以是 {% %}
用于处理和控制指令,或 {{ }}
用于输出变量。
但这些都是个人喜好。我不知道选择 Jinja2 而不是 Mako 的更重要的理由,反之亦然。 Pylons 非常棒,您可以使用任何一种!
更新包含 Jinja2 宏。尽管无论如何都是人为的,但我认为 Jinja2 示例更易于阅读和理解。 Mako 的指导理念是“Python 是一种很棒的脚本语言。不要重新发明轮子……您的模板可以处理它!”但是 Jinja2 的宏(实际上是整个语言)看起来更像是 Mako 所做的 Python!
关于python - Mako 还是 Jinja2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435972/
下面抛出一个语法错误,“解析时出现意外的 EOF”: ${foo({'bar':'baz'})} 我猜这是来自内部闭合花括号。 这工作正常: ${foo(dict(bar='baz'))} 但是使用字
我在查看 Mako 的文档时发现了 Mako 的 TemplateLookup 函数:Using TemplateLookup .但是,我从未在 Pyramid 的文档中看到过这一点,因为我从来不需要
在 mako 模板中输出一些 UGC( $user.text )时,我想使用 mako 过滤器 'h' 清理内容,然后添加一些 标签代替换行符,所以有一些格式。 但是,mako 似乎忽略了我应用 'h
我是 Python 和 Mako 等新手。我的问题可能看起来很愚蠢,我提前道歉,但我查看了文档但找不到它。 在.py文件中,我可以使用#字符来记笔记。我也可以使用 ''' notes notes ''
我有一个想法,将模板放入数据库中,并为设计者提供直接从 CMS 面板编辑模板的可能性。但困扰我的是安全问题。如果我们能够将 python 命令直接放入模板中,那它怎么会安全呢?如果我在 mako 模板
有没有一种简单的方法可以在 mako 中调用给定字符串名称的函数? 最佳答案 您应该能够在 globals() 返回的字典中查找它。例如: ${globals()[func_name](...)}
我有这样一个方法: def index(self): title = "test" return render("index.html", title=title) 其中 render
有没有办法将包含错误的模板字符串添加到 mako 的错误跟踪中? 最佳答案 我认为您不太可能找到这样的东西。与所有其他快速 python 模板引擎一样,Mako 通过将您的模板编译为 python 代
我正在尝试读取数据库表内容并使用 mako 和 bottle 将其显示为网页。该表中有一些 Unicode (utf-8) 字段。 UnicodeDecodeError('ascii', 'MOTOR
这是我的 Mako 代码,但当我将此代码与我的服务器 Cherrypy 一起使用时出现错误。错误是 SyntaxException: (SyntaxError) invalid syntax (, l
以下示例来自 Mako docs实际上不起作用: inner, x is ${x}, y is ${y} outer, x is ${x},
我们有这段代码并且运行良好。重构后,它不再起作用了。正如评论所说,如果请求不是 ajax 请求,我们只想从基页继承。为此,我们将一个参数传递给模板,并根据该参数决定是否继承。 查看.py class
目标:在基础模板和子模板中访问 myargs。目前我只能访问其中一个。 调用: child.render(myargs={'a':2, b:'5'}) 基本摘录: % if myargs['a']:
是否可以在渲染前获取 Mako 模板中变量的名称? from mako.template import Template bar = Template("${foo}") # something li
在从 Mako 模板自动生成代码的用例中,我希望有一个很好的语法来删除前导空格(类似于使用行尾的 \ 删除换行符)。 下面的代码 from mako.template import Template
我希望能够创建一个变量“hasBannana”,该变量仅存在于检查某些事情的 mako 模板 html 中。假设杂货和商店是从生成模板的函数传入的。 %for customer in store: h
每次我尝试在 Sublime Text 中使用这个语法荧光笔时都会弹出这个错误。我不确定我将如何修复它,谷歌似乎没有显示任何结果。是否有人恰好是 XML/TM 语法专家可以提供帮助? 错误。 加载语法
我有一个 Mako 文件(我的 Python 服务器将其转换为 HTML),其中包含带有 JavaScript ES6 模板文字的脚本元素。由于 Mako 和 JS 都识别 ${..},我被迫编写 $
以下内容适用于 Python 命令行 CELLULAR='1.2.3.4' OCTETS=CELLULAR_IP.split('.') FOURTH_OCTET=OCTETS[3] T101_IP='
我想找到一种方法来截断标题(如果太长),如下所示: 'this is a title' 'this is a very long title that ...' 有没有办法在mako中打印字符串,并在
我是一名优秀的程序员,十分优秀!