如何使用Web2Py在视图中显示控制器的html?

时间:2017-08-31 00:02:34

标签: python html model-view-controller webserver web2py

我正在使用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而不是纯文本?

2 个答案:

答案 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'>")}