我有一个 Mako 文件(我的 Python 服务器将其转换为 HTML),其中包含一个带有 JavaScript ES6 模板文字的脚本元素。正如 Mako 和 JS 都认识到的那样${..},我被迫编写代码${'${..}'}以使 JS 模板工作——${{..}}类似于 f-string 什么也不做,我找不到|可以逃避它的标志。说<script>//This is just an examplelet entry = {title: '${some_py_value}'} //Mako templating$('body').append(`${'${entry.title}'}`); //JS templating</script>这有效,但看起来很尴尬,就像你在 Perl 中看到的那样,以至于我经常恢复到字符串连接——这通常表明有一个更优雅的解决方案潜伏着。有吗?
1 回答
幕布斯7119047
TA贡献1794条经验 获得超8个赞
可以使用标签<%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 变量,这就是应该发生的事情*。catch 是%if并且%for不会在%text块中工作,但那些应该是 JS 编码的。
∗) 好的,理想情况下,所提供的 HTML 页面应该是通用的,没有外部的主要 JS 代码作为单个文件,其中包含由多个 ajax 请求填充的用户数据。尽管总是存在极端情况(例如,巨大的 Python 非 JSON 可序列化对象具有复杂且计算量大的方法,需要经常调用但不能作为一系列 ajax 请求运行,因为数据需要先初始化但不能存储在服务器端等等。)。
添加回答
举报
0/150
提交
取消