Mako 模板中的 JavaScript 模板文字

标签 javascript python ecmascript-6 mako

我有一个 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 中看到的那样,以至于我经常恢复到字符串连接——这通常表明存在更优雅的解决方案。有吗?

最佳答案

可以使用标签 <%text> 关闭模板。和</%text> (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 block ,但这些应该是 JS 编码的。

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

关于Mako 模板中的 JavaScript 模板文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57360613/

相关文章:

javascript - 将 "nomodule"属性动态添加到 &lt;script nomodules src ="abc.com">

javascript - 当浏览器直接支持基于 ECMAScript 6 的 javascript 时,Microsoft Typescript 会过时吗

javascript - 函数调用的对象解构

php - 终端中从文件中提取文本的命令是什么

javascript - 在 Meteor 中, getData ('text' ) 总是返回空字符串

javascript - 在里面插入一个动态值

python限制重复字母

javascript - Jquery Ajax 函数 setInterval - 控制台错误

python - 为什么 os.normpath 不折叠前导双斜杠?

Python3如何在Pandas Dataframe上实现滑动窗口计数