过滤器safe
实际上确实可以防止 HTML 转义,因此可以为您的问题提供解决方案。
但是,您会在 JavaScript 中遇到错误,因为您现在在受双引号限制的字符串内有双引号!
假设 的值为values[0]
字符串: double-quote " and ampersand
,您将得到:
function test() {
var nameField=document.getElementById("thing");
nameField.value="double-quote " and ampersand"; //trailing and ampersand causing error
}
您可以尝试通过用"{{ values[0] }}"
单引号包裹的字符串替换来解决问题'{{ values[0] }}'
。但是如果你的字符串包含单引号呢?
您可能还认为您需要转义特殊字符,但您需要使用 java 脚本转义(双引号变为%22
)而不是 python 转义(双引号变为\"
)。
恕我直言,您问题的核心在于您使用 Jinja 打印代码(而不是值或标记)。当您需要动态行为时,既然可以拥有提供动态行为客户端的静态代码,为什么还要更改 JavaScript 代码呢?
如果values[0]
已经在 HTML 文件的 DOM 中(在id
HTML 元素中,或在任何其他属性或在输入的 HTML 中option
)select
,让 JavaScript 去获取它。如果它不在 DOM 中,请将其放在一个隐藏元素中,并带有适当的id
eg
`<div style="diplay:none;" id="value0">{{ value[0] }}</div>`
并在需要时检索它。
这还具有将您的 JavaScript 代码与服务器端页面生成和 Jinja 完全分离的优点:您的 JavaScript 在提供正确 HTML 结构的单一条件下仍然可以工作。您可以将 JavaScript 移动到.js
文件中,并将其用于其他项目,以及不使用 Flask/Jinja2 的项目。