我正在使用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,并且是可编辑的表单字段。
答案 0 :(得分:1)
默认情况下,pandas.DataFrame.to_html()
将转义不安全的字符。
您可以通过传递escape=False
(请参见docs)来更改该行为。
请注意,这会使您的应用程序容易受到跨站点脚本攻击的攻击,并且您将无法从Django的表单验证工具中受益