Где в приложении Django должен жить код разборки уценки?

Я использую редактор WMD в админке django. Я написал простой синтаксический анализатор (в основном, регулярные выражения), чтобы я мог поймать определенные теги в уценке и соответственно вставить HTML. Моя проблема в том, что мне нужен доступ к самому объекту Django.

В настоящее время я переопределяю Model.save() и звонит Model.process_markdown()

def process_markdown(self):
    p = re.compile("\[\[\s*(?P<tag>image):(?P<id>[\d,]+)\s*\]\]")
    processed = p.sub(partial(render_markdown, self), self.body_markdown)
    return markdown.markdown(processed)

Результат затем сохраняется в Model.rendered поле на моей модели. Если вы заметили, у меня есть render_markdown функция вызывается. Это хранится в файле с именем util.py в моем приложении и делает всю настоящую работу.

Все работает, но кажется, что должен быть лучший способ. Я знаю, что могу привязать к уценке для пользовательских тегов и сделать это чище, но я должен иметь возможность доступа к объекту django, и я, когда я ссылаюсь на связанные встроенные объекты. Насколько я могу судить, у меня нет способа сделать это.

Есть ли лучший способ организовать это?

1 ответ

Остерегайтесь этой уценки, позволяющей проходить через HTML. Если вы сделаете это, вам, вероятно, понадобится markdown(html, safe_mode='escape'). Если вы позволяете ненадежным источникам вставлять.body_markdown, вам нужно санировать этот ввод с помощью чего-то вроде bleach: http: //pypi.python. орг / PyPI / отбеливатель

Другие вопросы по тегам