有没有办法在作为表格的模板变量中执行 html?

Posted

技术标签:

【中文标题】有没有办法在作为表格的模板变量中执行 html?【英文标题】:Is there a way to execute html inside of a template variable that is a table? 【发布时间】:2020-02-24 13:59:39 【问题描述】:

我正在使用 Django 创建一个网站,我采用了一个 pandas 数据框并将其存储为模板变量并将其传递给渲染请求。我想让一些列形成元素,但没有成功。

我已经尝试将该函数应用于 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 字符串的表格数据字段。例如,有人说"&lt;input type='text' value=55.95&gt;"。它应该只是说 55.95 并且是一个可编辑的表单域。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于有没有办法在作为表格的模板变量中执行 html?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法以从 django 视图中作为上下文传递的一种很好的方式在 html 中显示 json 结果?

执行多个SUMIFS - Google表格脚本编辑器

更新大数据的表结构的缓和做法

谷歌表格中是不是有办法选择单元格列表作为数组用作连接表格中的参数?

聚合物3 - 有没有办法将html模板提取到一个单独的html文件中?

有没有办法将变量传递给 Django 中的“扩展”模板?