我正在利用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而不是纯文本的变量?
默认情况下,通过{{=...}}
写入视图的任何内容都可以逃脱。为了抑制逃逸,您可以使用XML()
助手:
{{=XML(html_code)}}
另外,您可以通过服务器端HTML帮助者构建HTML,而不是生成RAW HTML:
def index():
return {"html_code": IMG(_src='https://static1.squarespace.com/static/54e8ba93e4b07c3f655b452e/t/56c2a04520c64707756f4267/1493764650017')}
,然后您可以在视图上留下视图:
{{=html_code}}
以上假设您正在通过自己的代码生成HTML。如果所讨论的HTML来自不受信任的来源(例如,用户输入),则将其写入视图而不逃脱的情况下会带来安全风险。在这种情况下,您可以让XML()
助手进行一些消毒(即,它将将允许的HTML标签和属性限制在安全的白名单中)(有关更多详细信息,请参见此处):
{{=XML(html_code, sanitize=True)}}
尝试使用xml()助手
def index():
return {"html_code":XML("<img src='https://static1.squarespace.com/static/54e8ba93e4b07c3f655b452e/t/56c2a04520c64707756f4267/1493764650017'>")}