【问题标题】:JavaScript template literals in a Mako templateMako 模板中的 JavaScript 模板文字
【发布时间】:2019-12-13 02:18:54
【问题描述】:

我有一个 Mako 文件(我的 Python 服务器将其转换为 HTML),其中包含一个带有 JavaScript ES6 模板文字的脚本元素。由于 Mako 和 JS 都认识 ${..},我不得不写 ${'${..}'} 来让 JS 模板工作——${{..}} 类似于 f 字符串什么都不做,我找不到可以逃避它的 | 标志。 说

<script>
//This is just an example
let entry = {title: '${some_py_value}'} //Mako templating
$('body').append(`${'${entry.title}'}`); //JS templating
</script>

这可行,但看起来很尴尬,就像您在 Perl 中看到的那样,以至于我经常恢复到字符串连接——通常表明潜伏着更优雅的解决方案。有吗?

【问题讨论】:

标签: javascript python ecmascript-6 mako


【解决方案1】:

可以使用标签&lt;%text&gt;&lt;/%text&gt; (ref) 关闭模板。介于两者之间的任何内容都将呈现为文本而不被解析。

<script>
//This is just an example
let entry = {title: '${some_py_value}'} //Mako templating
<%text>
$('body').append(`${entry.title}`); //JS templating
</%text>
</script>

如果两者没有混合,这比${'${jsVariable}'} 有优势,首先在 JS 中传递 Python 变量,这是应该发生的*。问题是 %if%for%text 块中不起作用,但应该是 JS 编码的。

∗) 好的,理想情况下,提供的 HTML 页面应该是通用的,没有外部的主要 JS 代码作为单个文件,用户数据由多个 ajax 请求填充。尽管总是存在极端情况(eg 巨大的 Python 非 JSON 可序列化对象,其具有复杂且计算量大的方法,需要经常调用,但不能作为数据需要的一系列 ajax 请求运行首先初始化但不能存储在服务器端等)。

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 2016-08-02
    • 1970-01-01
    • 2011-04-16
    • 2011-10-14
    • 2011-04-24
    • 2011-04-01
    • 2014-06-27
    • 2013-05-14
    相关资源
    最近更新 更多