我正在使用web2py,我想显示从控制器中的python函数返回的html代码。
我有以下控制器(default.py):
def index():
return {"html_code":"<img src='https://static1.squarespace.com/static/54e8ba93e4b07c3f655b452e/t/56c2a04520c64707756f4267/1493764650017'>"}
这是我的观点(index.html):
{{=html_code}}
当我访问网站(http://127.0.0.1:8000/test/default/index)时,我看到以下内容(而不是图片)
<img src='https://static1.squarespace.com/static/54e8ba93e4b07c3f655b452e/t/56c2a04520c64707756f4267/1493764650017'>
如何将名为html_code的变量渲染为html而不是纯文本?
答案 0 :(得分:1)
默认情况下,通过{{=...}}
写入视图的所有内容都会被转义。要禁止转义,可以使用XML()
帮助程序:
{{=XML(html_code)}}
或者,您可以通过服务器端HTML帮助程序构建HTML,而不是生成原始HTML:
def index():
return {"html_code": IMG(_src='https://static1.squarespace.com/static/54e8ba93e4b07c3f655b452e/t/56c2a04520c64707756f4267/1493764650017')}
然后你就可以离开视图了:
{{=html_code}}
以上假设您是通过自己的代码生成HTML。如果所讨论的HTML来自不受信任的来源(例如,用户输入),则将其写入视图而不进行转义会带来安全风险。在这种情况下,您可以让XML()
帮助程序进行一些清理(即,它会将允许的HTML标记和属性限制为安全白名单)(有关详细信息,请参阅here):
{{=XML(html_code, sanitize=True)}}
答案 1 :(得分:0)
尝试使用XML()帮助程序
def index():
return {"html_code":XML("<img src='https://static1.squarespace.com/static/54e8ba93e4b07c3f655b452e/t/56c2a04520c64707756f4267/1493764650017'>")}