有没有一种方法可以在表的模板变量中执行html?

时间:2019-10-29 10:26:34

标签: python html css django forms

我正在使用Django创建一个网站,并且已将pandas数据框存储为模板变量并将其传递给render请求。我想将一些列作为表单元素,但是如何做到这一点却没有成功。

我已经尝试将函数应用于pandas数据框,以便向列中的每个元素添加适当的HTML。但是,HTML本身会显示在实际网站上。

这是我的python代码:

def optimizer(request):
    df = Optimizer.get_daily_roster('E:\website\optimizer\Predictions.csv')
    df = df.drop(columns=['Name + ID', 'Game Info', 'Unnamed: 0', 'Unnamed: 0.1', 'name'])
    df = df.rename(columns={'TeamAbbrev': 'Team', 'AvgPointsPerGame': 'Predicted FP'})
    df['Predicted FP'] = df['Predicted FP'].apply(lambda x: round(float(x), 2))
    df['Predicted FP'] = df['Predicted FP'].apply(lambda x: "<input type='text' value=" + str(x) + ">")
    df['Min Exposure'] = 0
    df['Max Exposure'] = 1
    # cols_to_values = df.to_dict(orient='list')
    # cols_to_values = {x.translate({32: None}): y
    #                 for x, y in cols_to_values.items()}
    html_table = df.to_html(index=False, justify='left',
                            classes=[
                                'table table-bordered table-striped table-hover table-responsive table-sm, container-fluid'])
    return render(request, 'optimizer/optimizer.html', {'player_table': html_table})

这是我的HTML:

{% extends "optimizer/base.html" %}
{% block content %}
<h1>Optimizer</h1>
<form method="post">
    <input type="submit" value="Generate Lineups">
    <div class="table-responsive">
        {{ player_table |safe }}
    </div>
</form>
{% endblock content %}

我正在获取表示整个HTML字符串的表数据字段。例如,有人说"<input type='text' value=55.95>"。它应该只说55.95,并且是可编辑的表单字段。

1 个答案:

答案 0 :(得分:1)

默认情况下,pandas.DataFrame.to_html()将转义不安全的字符。

您可以通过传递escape=False(请参见docs)来更改该行为。

请注意,这会使您的应用程序容易受到跨站点脚本攻击的攻击,并且您将无法从Django的表单验证工具中受益