我完全是一个新的蜜蜂在Django,这是我的第二天学习它。我已经连接到数据库,并使用pandas.read_sql_query从数据库中获取df(我知道有ORM,但由于我们使用MSSQL,所以我需要更多的时间来弄清楚,我真的需要至少显示一些东西,所以我使用pandas.read_sql_query)我已经得到了df,我希望它显示在html中。根据其他一些帖子,我使用下面的代码:
view.py
a_query="""
select *
FROM db
"""
a = pandas.read_sql_query(a_query,connection)
a_html = a.to_html(index=False)
print(a)
print(type(a))
return render(request, 'index.html',{'a_html':a_html})
类型显示:所以我觉得一切都很好。
<class 'pandas.core.frame.DataFrame'>
index.html
I put {{a_html}} in the body part, it's the only thing I change after the original format.
在我运行www.example.com之后manage.py,它在html中显示:
<table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th>IT Business Service</th> <th>IT Service Instance</th> </tr> </thead> <tbody> <tr> <td>
诸如此类的事。
但是我想展示table,我该怎么做呢?任何帮助都是非常感谢的!
3条答案
按热度按时间zsohkypk1#
这里的问题似乎与Django的自动转义功能有关。这是Django为防止HTML注入攻击而设置的一个安全特性。模板中的**{{a_html}}被Django的模板引擎转义,因此HTML标签显示为文本。
要解决这个问题,你需要告诉Django你想让HTML内容显示为HTML而不是文本。这可以通过Django的safe**filter来实现。
你可以这样做:
这应该允许HTML内容以表格的形式正确显示。
但是,请记住,使用safe意味着您绕过了Django的自动HTML转义,如果您不小心将哪些HTML标记为安全,则可能会使您的站点暴露于跨站脚本(XSS)攻击。在您的例子中,由于您是从Pandas Dataframe 生成HTML,因此风险可能很低,但通常仍然需要注意。
crcmnpdw2#
gcuhipw93#
我自己也是初学者,所以对我的回答持保留态度。
如果你有一个像列表这样的容器,你可以通过它循环并根据条目的数量生成表格:
因此,将数据格式化为可迭代对象,并在HTML中呈现它