Flask 模板中的动态 HTML 转义

Dynamic HTML escaping in template in Flask

我正在使用 Flask 的 jinja2 模板来显示网页。现在,每当用户在文本字段中输入一些数据(Markdown 格式)时,我都会向服务器发送请求,然后相应的视图 returns 将数据转换为 HTML。然后使用 jquery 我将 html 插入 div.

现在,Flask 模板不会按照预期的方式呈现 HTML。我试过在服务器端使用 Flask 的标记和转义,但它仍然无法正确显示。我必须想出一种方法让模板完全忽略模板的某个区域而不是自动转义它。我什至尝试使用 {% autoescape off %} 标签关闭自动转义,但我认为这仅适用于 {{..}} 内的内容,或者仅在使用 render template 函数时有效

参考代码:

查看函数

@app.route("/convert_markdown/", methods=["GET", "POST"])
def convert_markdown():

    content = request.args.get('val')
    value = markdown.convert(content)

    return value

javascript

$("#content").bind('keyup', function() {
    var value = $( "input:text[name=content]" ).val();
    $( "#preview" ).text( value );
    $.get("/convert_markdown/",{val:value}, function(data) {
        $( "#preview" ).text( data );
    });
});

模板- html

<div id="preview"></div> 

您正在插入 return 值作为文本,而不是 HTML。变化

$( "#preview" ).text( data );

$('#preview').html(data);

您也可以跳过 jQuery 并使用

document.getElementById('preview').innerHTML = data;