将 \n 和其他原始字符传递到 html 输入字段
Pass \n and other raw characters into html input field
我正在编写一个允许用户为批处理作业指定参数的 Flask 应用程序 - 我希望用户提供的参数之一是定界符 - 用于 csv 文件,或作为行尾终止符对于文本文件。
我有一个 json 文档,其中包含给定作业的默认值,我使用这些来预填充用户可以选择编辑的一系列表单输入元素。
我遇到的问题是,当默认参数是制表符或换行符时,它们在我的 json 中分别表示为 \t
或 \n
- 但是将这些值注入时我的 html 页面构建代码,它们分别被解释为实际的制表符或换行符。
data_content_template = """<label for="{pipe}_{e}_{dsk}">{dsk}:</label><br>
<input type="text" id="{pipe}_{e}_{dsk}" name="{pipe}_{e}_{dsk}" value="{dse}"><br>"""
form_contents=[]
for e,dsi in enumerate(content.get("data_source",[])):
for dk,de in dsi.items():
form_contents.append(data_content_template.format(pipe=escape(content.get("pipe")),
e=e,
dsk=escape(dk),
dse=escape(de)))
在这里,我使用 flask.escape 尝试将这些值强制输入到它们的文本框中,而不将它们转换为白色-space。但是当我查看 html 来源时,它是这样的:
<input type="text" id="ref_data_0_newline" name="ref_data_0_newline" value="
"><br>
如何以原始的、未更改的形式传递 \n
,以便它显示一个反斜杠后跟一个 n?
你能用 double-backslash 将 '\n' 的字符串替换为 '\\n' 吗?如果这不起作用,您可以尝试将 '\n' 编码为 '\n'。
您也可以尝试将换行符直接编码为“
”。
您可以将类似下面的 JS 示例的内容重写为 python,以将不在白名单中的任何特殊字符转换为其实体代码。我下面的例子转换
进入
但您可以删除或注释掉该行,具体取决于您是否希望换行符在 html.
中显示为换行符
/**
* Turn all chars not in w (whitelist) into their html-friendly character codes. Converts line-breaks to br.
*
* @param {string} text The text to escape.
* @return The escaped text.
* @customfunction
*/
function escapeText_html (text){
var s ="", w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,.!?;-$%# ";
for(i=0; i<text.length; i++){
c = text.substring(i, i+1);
if(w.indexOf(c) != -1 ){
s += c;
}else{
s += "&#" + c.charCodeAt(0) + ";";
}
}
s=replaceAll(s, " ", "<br />");
return s;
}
你想要烧瓶safe
过滤器...escape
与你需要的相反
{{ form_content | safe }}
然后它应该呈现 html
我正在编写一个允许用户为批处理作业指定参数的 Flask 应用程序 - 我希望用户提供的参数之一是定界符 - 用于 csv 文件,或作为行尾终止符对于文本文件。
我有一个 json 文档,其中包含给定作业的默认值,我使用这些来预填充用户可以选择编辑的一系列表单输入元素。
我遇到的问题是,当默认参数是制表符或换行符时,它们在我的 json 中分别表示为 \t
或 \n
- 但是将这些值注入时我的 html 页面构建代码,它们分别被解释为实际的制表符或换行符。
data_content_template = """<label for="{pipe}_{e}_{dsk}">{dsk}:</label><br>
<input type="text" id="{pipe}_{e}_{dsk}" name="{pipe}_{e}_{dsk}" value="{dse}"><br>"""
form_contents=[]
for e,dsi in enumerate(content.get("data_source",[])):
for dk,de in dsi.items():
form_contents.append(data_content_template.format(pipe=escape(content.get("pipe")),
e=e,
dsk=escape(dk),
dse=escape(de)))
在这里,我使用 flask.escape 尝试将这些值强制输入到它们的文本框中,而不将它们转换为白色-space。但是当我查看 html 来源时,它是这样的:
<input type="text" id="ref_data_0_newline" name="ref_data_0_newline" value="
"><br>
如何以原始的、未更改的形式传递 \n
,以便它显示一个反斜杠后跟一个 n?
你能用 double-backslash 将 '\n' 的字符串替换为 '\\n' 吗?如果这不起作用,您可以尝试将 '\n' 编码为 '\n'。
您也可以尝试将换行符直接编码为“ ”。
您可以将类似下面的 JS 示例的内容重写为 python,以将不在白名单中的任何特殊字符转换为其实体代码。我下面的例子转换
进入
但您可以删除或注释掉该行,具体取决于您是否希望换行符在 html.
/**
* Turn all chars not in w (whitelist) into their html-friendly character codes. Converts line-breaks to br.
*
* @param {string} text The text to escape.
* @return The escaped text.
* @customfunction
*/
function escapeText_html (text){
var s ="", w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,.!?;-$%# ";
for(i=0; i<text.length; i++){
c = text.substring(i, i+1);
if(w.indexOf(c) != -1 ){
s += c;
}else{
s += "&#" + c.charCodeAt(0) + ";";
}
}
s=replaceAll(s, " ", "<br />");
return s;
}
你想要烧瓶safe
过滤器...escape
与你需要的相反
{{ form_content | safe }}
然后它应该呈现 html