2013-02-12 2 views
0

Я использую редактор WMD в admin django. Я написал простой синтаксический анализатор (чаще всего в регулярном выражении), поэтому я могу уловить определенные теги в уценке и вставить HTML соответственно. Моя проблема в том, что мне нужен доступ к самому объекту Django.Где должен выглядеть код разборки в реальном времени в приложении 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. Thats хранится в файле с именем util.py в моем приложении и выполняет всю настоящую работу.

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

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

ответ

0

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

+0

Единственные люди, которые почта - доверенные сотрудники, так что, к счастью, мне не нужно санировать эту степень. Спасибо за вашу помощь! –