第一篇文章;我会尽量保持简短和甜美。
我正在尝试呈现一个编辑表单,该表单可以检测并填充输入字段(如果这些字段已经存在值)。我将烧瓶与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的项目一起使用。
以下是我的代码,正在获取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=…