Python的轻量级标记语言

时间:2009-08-03 18:02:54

标签: python html markup

编写Python Web应用程序,我想创建一个文本区域,用户可以用轻量级标记语言输入文本。该文本将导入到html模板并在页面上查看。今天我使用这个命令来创建textarea,它允许用户输入任何(html)文本:

my_text = cgidata.getvalue('my_text', 'default_text')
ftable.AddRow([Label(_('Enter your text')),
               TextArea('my_text', my_text, rows=8, cols=60).Format()])

如何更改此选项以便只允许一些(安全,最终轻量级)标记?包括消毒剂在内的所有建议都是受欢迎的,只要它可以轻松地与Python集成。

3 个答案:

答案 0 :(得分:8)

使用python markdown实现

import markdown
mode = "remove" # or "replace" or "escape"
md = markdown.Markdown(safe_mode=mode)
html = md.convert(text)

它非常灵活,您可以使用各种扩展,创建自己的扩展等。

答案 1 :(得分:2)

您可以使用restructured text。我不确定它是否具有消毒选项,但它得到了Python的良好支持,并且它可以生成各种格式。

答案 2 :(得分:1)

这个简单的清理功能使用白名单,与python-html-sanitizer-scrubber-filter的解决方案大致相同,但也允许限制属性的使用(因为你可能不希望别人使用,等等) style属性):

from BeautifulSoup import BeautifulSoup

def sanitize_html(value):
    valid_tags = 'p i b strong a pre br'.split()
    valid_attrs = 'href src'.split()
    soup = BeautifulSoup(value)
    for tag in soup.findAll(True):
        if tag.name not in valid_tags:
            tag.hidden = True
        tag.attrs = [(attr, val) for attr, val in tag.attrs if attr in valid_attrs]
    return soup.renderContents().decode('utf8').replace('javascript:', '')