【问题标题】:HTMLParser unescape does not pass < or > unescaped in Pyramid appHTMLParser unescape 不传递 < 或 > 在 Pyramid 应用程序中未转义
【发布时间】:2013-11-21 20:28:19
【问题描述】:

标题说明了大部分内容。 Python3.3 使用 Pyramid 应用框架(-s starter) 将此代码添加到 views.py 控制器:

from HTMLParser import HTMLParser
h = HTMLParser()

string = '<p>Hi there!</p>';
return dict( string=h.unescape(string) )

return dict(..) 被传递给一个带有简单 ${string} 标记的模板,Web 浏览器中的结果总是显示尖括号而不是将它们呈现为标签。即,网页显示:

Hi there!

我需要能够将用户内容(带有标记的 html)传递给模板,以使其内联呈现。我还需要做什么?

【问题讨论】:

  • HTMLParser 是什么?在 Python 3.3 中,HTMLParser 类位于模块 html.parser 而不是 HTMLParser 中,它确实 not 有任何 unescape 方法...
  • @PiotrDobrogost:这更有可能是 Python 2。 .unescape() 方法是出了名的无证。它仍然存在于 Python 3.3 中。
  • .unescape() 方法是将 HTML 实体变回常规字符,与您想要的完全正交;标记字符串安全以包含在您的模板中。
  • 您使用什么模板语言来呈现这些字符串?
  • 是的,我正在运行 2.7。

标签: python python-3.x escaping pyramid html-parser


【解决方案1】:

模板引擎正在转义变量,因为几乎每个模板引擎都会这样做。

您需要构建模板以不转义变量。这在 mako 、 chameleon 等中有所不同。

IIRC,starter 脚手架使用 Chameleon 的 .pt 模板。

如果您使用的是这个,另一个 StackOverflow 问题可以完全回答您的问题:Python Pyramid & Chameleon templating language escapes html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2012-04-14
    相关资源
    最近更新 更多