Легкий язык разметки для Python - PullRequest
4 голосов
/ 03 августа 2009

Программируя веб-приложение на Python, я хочу создать текстовую область, в которую пользователи могут вводить текст на облегченном языке разметки. Текст будет импортирован в HTML-шаблон и просмотрен на странице. Сегодня я использую эту команду для создания текстовой области, которая позволяет пользователям вводить любой (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 ]

8 голосов
/ 03 августа 2009

Использование Python Уценка Реализация

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

Он очень гибкий, вы можете использовать различные расширения, создавать свои собственные и т. Д.

2 голосов
/ 03 августа 2009

Вы можете использовать реструктурированный текст . Я не уверен, что у него есть опция очистки, но он хорошо поддерживается Python и генерирует все виды форматов.

1 голос
/ 04 августа 2009

Эта простая дезинфицирующая функция использует белый список и примерно такая же, как решение 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:', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...