pandas Django df to html show text

rsl1atfo  于 2023-06-28  发布在  Go
关注(0)|答案(3)|浏览(108)

我完全是一个新的蜜蜂在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,我该怎么做呢?任何帮助都是非常感谢的!

zsohkypk

zsohkypk1#

这里的问题似乎与Django的自动转义功能有关。这是Django为防止HTML注入攻击而设置的一个安全特性。模板中的**{{a_html}}被Django的模板引擎转义,因此HTML标签显示为文本。
要解决这个问题,你需要告诉Django你想让HTML内容显示为HTML而不是文本。这可以通过Django的
safe**filter来实现。
你可以这样做:

{{ a_html | safe }}

这应该允许HTML内容以表格的形式正确显示。
但是,请记住,使用safe意味着您绕过了Django的自动HTML转义,如果您不小心将哪些HTML标记为安全,则可能会使您的站点暴露于跨站脚本(XSS)攻击。在您的例子中,由于您是从Pandas Dataframe 生成HTML,因此风险可能很低,但通常仍然需要注意。

crcmnpdw

crcmnpdw2#

import pandas as pd

from django.shortcuts import render

def your_view(request):

# Your SQL query
a_query = """
SELECT *
FROM db
"""
# Execute the query and fetch the data into a DataFrame
a = pd.read_sql_query(a_query, connection)

# Convert the DataFrame to an HTML table
a_html = a.to_html(index=False)

# Pass the HTML table to the template for rendering
return render(request, 'index.html', {'a_html': a_html})
gcuhipw9

gcuhipw93#

我自己也是初学者,所以对我的回答持保留态度。
如果你有一个像列表这样的容器,你可以通过它循环并根据条目的数量生成表格:

<tr>
    <th>Table Headline</th>       
</tr>
{% for elem in my_data %}
  <tr>
    <td>{{elem}}</td>
  </tr>
{% endfor %}

因此,将数据格式化为可迭代对象,并在HTML中呈现它

return render(request, 'index.html',{'my_data':function_that_returns_data_as_a_list()})

相关问题