Jinja2无法在javascript / html中呈现引号或amp;安全过滤器无法解决 - javascript

第一篇文章;我会尽量保持简短和甜美。

我正在尝试呈现一个编辑表单,该表单可以检测并填充输入字段(如果这些字段已经存在值)。我将烧瓶与jinja2一起使用,当我使用{{ }}打印运算符时,我的字段将其双引号和与号分别表示为"&

问题是:仅当在JavaScript函数中使用了打印运算符时,才会发生这种情况。我到处都在寻找解决方案,似乎jinja2安全过滤器可以解决问题,但是当我将其附加到打印值后,它使我的所有JavaScript失效。

下面是一个代码示例:

function test() {
    var nameField=document.getElementById("thing");
    nameField.value="{{ values[0] }}";
}

'values'是一个python列表。

请让我知道是否可以添加任何内容来澄清问题。

javascript大神给出的解决方案

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中(HTML元素的id或任何其他属性或option输入的select的HTML中),则放开JavaScript,然后获取它。如果它不在DOM中,则将其放在带有适当id的隐藏元素中,例如

`<div style="diplay:none;" id="value0">{{ value[0] }}</div>`  

并在需要时检索它。

这还具有将您的JavaScript代码与服务器端页面生成和Jinja完全分离的优点:在提供正确的HTML结构的单个条件下,您的JavaScript仍然可以工作。您将能够将JavaScript移至.js文件,并将其与其他项目一起使用,以及与不使用Flask / Jinja2的项目一起使用。

html onClick打开url存储在php变量中 - javascript

以下是我的代码,正在获取Uncaught SyntaxError: Unexpected token },但是我的代码中没有看到任何}。 window.open期望用引号引起来的url,我尝试了单引号和双引号的不同组合,但不起作用并且也无法在echo中转义双引号。请帮助谢谢..<?php $a = "https://www.google.co…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

如何从客户端将数据插入数据库? - javascript

我是Web开发的初学者,可以访问cpanel上托管的网站,并且需要对其进行一些更改。这个网站的后端是由蛋糕PHP制作的,我想使用ajax从客户端将一些数据插入其数据库。问题是我不知道如何获取负责插入数据库的PHP文件的URL。参见下面的代码:var xhttp = newXMLHttpRequest(); xhttp.onreadystatechange= …

执行onclick时获得意外令牌 - javascript

我正在使用onclick事件从PHP调用JS函数。这是我的代码:我在一个函数中,因此我需要通过PHP来完成它,因为然后我会返回:$html = '<input type="checkbox" checked value="1" id="setGetSku" name="se…

为HTML表单GET方法添加其他文本 - javascript

使用表单的“ get”方法时,<form action="domain.com" method="get"> Surname: <input type="text" name="ABC"><br> Name: <input type=&#…