使用烧瓶中的to_html传递html元素

时间:2017-11-14 07:39:40

标签: python flask

我的数据框包含一个包含<canvas> something </canvas>元素的列。在flask应用程序中,我使用df.to_html()将此数据传递给模板,但它永远不会正常工作,并始终在显示的html表格中显示<canvas>

I intend to let the canvas element be captured by a <code>chartjs</code> function

2 个答案:

答案 0 :(得分:2)

要在<, >, and &方法中显示字符to_html()符号,我们需要将escape属性更改为False。因为默认情况下to_html方法会将字符<, >, and &转换为HTML安全序列。此外,我们需要在模板文件中使用safe过滤器来显示表格内的标签。

由于您已经找到了如何在Flask模板中正确显示HTML,我将举例说明未来读者的操作。

app.py包含一个包含html标记的数据框,我们希望在模板中呈现这些标记:

import pandas as pd
from flask import Flask, render_template

def get_panda_data():
    tags = ["<h1>Example header</h1>",
            '<div style="color: red;">Example div</div>',
            '<input type="text" name="example_form" \
placeholder="Example input form">'
        ]
    pd.set_option('display.max_colwidth', -1)
    tags_frame = pd.DataFrame(tags, columns = ["Tag Example"])
    tags_html = tags_frame.to_html(escape=False)
    return tags_html    

app = Flask(__name__)

@app.route('/')
def index():
    html_data = get_panda_data()
    return render_template("dataframe_example.html", html_data = html_data)

if __name__ == '__main__':
    app.run(debug = True)

然后在模板文件dataframe_example.html中,我们可以轻松地显示由pandas to_html方法生成的数据表:

<!DOCTYPE html>
<html>
<head>
    <title>Dataframe Flask Example</title>
</head>
<body>
    <h1>Dataframe Flask Example</h1>
        {{ html_data | safe }}
</body>
</html>

输出如下:

dataframe_template_html

答案 1 :(得分:0)

我意识到我必须使用选项to_html(escape=False)来解决这个问题