如何防止 Python 在 web2py 中像 HTML 那样处理字符串?

How to keep Python from treating string like HTML in web2py?

我在 web2py 中工作,我正在尝试从控制器中打印出 html 代码,该代码是用 python 编写的。问题是,即使我在 python 中的字符串中写入 html,页面也会像正常 html 一样呈现此字符串。这似乎有一个简单的修复方法,但我一直无法找到答案。下面是具体代码。

  return ('Here is the html I'm trying to show: <img src= {0}>'.format(x))

生成的页面显示 "Here is the html I'm trying to show: ",然后其余页面为空白。如果我检查页面,其余代码仍然存在,这意味着它正在被读取,只是没有显示。所以我只需要一种方法来防止字符串中的 html 被解释为 html。有什么想法吗?

我认为您正试图在网络浏览器中查看此字符串。

要获取原始 html 而不是让浏览器渲染它,您可以将其包装在 <xmp> 标签中:

return ("Here is the html I'm trying to show: <xmp><img src= {0}></xmp>".format(x))

如果您想发送 HTML 标记但让浏览器将其视为纯文本并将其显示,则只需适当地设置 HTTP Content-Type header。例如,在 web2py 控制器中:

def myfunc():
    ...
    response.headers['Content-Type'] = 'text/plain'
    return ("Here is the html I'm trying to show: <img src={0}>".format(x))

另一方面,如果您希望浏览器将响应视为 HTML 并且您只关心它在浏览器中的显示方式(而不关心 returned 内容),您可以简单地转义 HTML 标记。 web2py为此提供了xmlescape函数:

def myfunc():
    x = '/static/myimage.png'
    html = xmlescape("<img src={0}>".format(x))
    return ("Here is the html I'm trying to show: {0}>".format(html))

以上将return以下内容发送给浏览器:

Here is the html I'm trying to show: &lt;img src=/static/myimage.png&gt;

浏览器将显示为:

Here is the html I'm trying to show: <img src=/test/image.png>

请注意,如果您改为使用 web2py 模板生成响应,插入的任何 HTML 标记都将自动转义。例如,您可以有一个如下所示的 myfunc.html 模板:

{{=markup}}

在控制器中:

def myfunc():
    ...
    return dict(markup="Here is the html I'm trying to show: <img src={0}>".format(x))

在这种情况下,web2py 将自动转义通过 {{=markup}} 插入的内容(因此无需显式调用 xmlescape)。