如何使用Web2py在视图中从控制器显示HTML



我正在利用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'>")}

最新更新