вторник, 9 августа 2011 г.

Django, BBCode, работа с BB-кодами, неизвестные теги

В Python есть такой модуль - postmarkup, который нужен для работы с BB-кодами. BB-коды в свою очередь нужны для безопасной работы с html-тегами.

На моем сайте посетители часто оставляют комментарии, содержащие код (bash, python и тд). До недавнего времени всем приходилось в строгом порядке использовать тег [code] при публикации кода, т.к. без этого тега плагин postmarkup видел в куске кода что-нибудь вроде if [ "Q" == "Q" ] then , принимал это за кривой BB-тег и удалял [ "Q" == "Q" ], оставляя лишь "if then". У меня стояла последняя версия postmarkup 1.1.4, вышедшая в 2008-м году.

Но недавно случилось счастье: я обнаружил, что если получить trunk postmarkup ( svn checkout http://postmarkup.googlecode.com/svn/trunk/ postmarkup-read-only ), то в коде postmarkup.py можно обнаружить новую опцию: render_unknown_tags , которая позволяет не удалять неизвестные BB-коды, а, экранируя, выводить их как обычный текст.


Чтобы было понятней, покажу, как postmarkup работал раньше:



>>> from postmarkup import render_bbcode
>>> render_bbcode('[b]if[/b] [ "$Q" == "A" ] [i]then[/i]')
u'<strong>if</strong> <em>then</em>'

Видно, что [ "$Q" == "A" ] принимается за неизвестный тег и удаляется. Так дело не пойдет.

С новой опцией postmarkup работает так:

>>> from postmarkup import render_bbcode
>>> render_bbcode('[b]if[/b] [ "$Q" == "A" ] [i]then[/i]', render_unknown_tags=True)
u'<strong>if</strong> [ "$Q" == "A" ] <em>then</em>'

Что нам и было нужно :)

Комментариев нет:

Отправить комментарий