Django模板中Pandas DataFrame显示异常:HTML代码原样输出求助
解决Django模板中Pandas DataFrame HTML代码不渲染的问题
嘿,这问题我刚学Django的时候也踩过坑!其实原因很简单:Django默认会自动转义模板变量里的HTML特殊字符,把<、>这些字符转成实体编码,所以你看到的是原始HTML代码而不是渲染好的表格。
给你两种简单的解决办法,选哪种都可以:
方法1:在模板中使用safe过滤器
直接在模板输出变量的时候加上|safe过滤器,告诉Django这段HTML内容是安全的,不需要转义:
修改你的模板代码:
{% load static %} <link rel="stylesheet" type="text/css" href="{% static 'blog/style.css' %}"> <html> <head><title>HTML Pandas Dataframe with CSS</title></head> <body> {{ table|safe }} <!-- 这里加上|safe过滤器 --> </body> </html>
方法2:在视图中标记HTML为安全
如果你想在视图层处理,就用Django提供的mark_safe函数,把生成的HTML字符串标记为安全内容,这样传到模板里直接输出即可:
修改你的views.py代码:
from django.shortcuts import render from django.utils.safestring import mark_safe # 导入mark_safe工具 import pandas as pd def about(request): df = pd.DataFrame({'a': [12, 3, 4], 'b': [5, 6, 7]}) df_html = df.to_html(classes='mystyle') safe_df_html = mark_safe(df_html) # 将HTML标记为安全内容 return render(request, 'blog/about.html', {'table': safe_df_html})
小提醒
这两种方法都能解决问题,但要记住:只有当你完全信任要输出的HTML内容时才使用!比如这里是你自己用Pandas生成的表格,没有用户输入的内容,所以很安全。如果是包含用户提交的内容,一定要做好过滤,避免XSS攻击哦~
内容的提问来源于stack exchange,提问作者AmirX
相关产品推荐
相关产品推荐

