Как переключить веб-приложение с HTML на Markdown? - PullRequest
2 голосов
/ 11 августа 2009

У меня есть сайт с поддержкой django. В настоящее время все текстовые поля являются просто старыми текстовыми вводами, которые принимают необработанный HTML. У меня нет необычного редактора или чего-то еще. Я хотел бы начать использовать Markdown и WMD, чтобы всем было легче.

Нужно ли запускать какой-то сценарий, чтобы просмотреть каждое текстовое поле в базе данных, чтобы преобразовать весь HTML в уценку? Если я пропущу HTML через фильтр уценки, он выйдет так же с другой стороны? Будет ли редактор ОМУ читать HTML-код с сервера и преобразовывать его в Markdown для редактирования пользователем?

Какой правильный курс действий здесь?

Ответы [ 4 ]

4 голосов
/ 11 августа 2009

Как я уже упоминал на ваш другой вопрос , при использовании markdown лучше всего сохранять текст в формате markdown и html в вашей базе данных. Таким образом, вам не нужно конвертировать в html каждый раз, когда просматриваете страницу, и легко отредактировать исходную уценку в админке.

Например, приложение блога может иметь

class BlogPost(models.Model):

    ...

    body = models.TextField(help_text='Use Markdown syntax.')
    #field to store generated html
    body_html = models.Textfield(editable=False, blank=True)

    ...

    def save(self):
        body_html=markdown(self.body)
        super(BlogPost, self).save()

    ...

Тогда в шаблоне вы можете использовать {{body_html|safe}}.

Надеюсь, это даст вам представление о том, как вы можете изменить свои модели. Боюсь, у меня нет предложений о том, как обрабатывать устаревшие данные HTML.

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

ОМУ не делает Html-to-markdown, только наоборот; Вы можете конвертировать HTML в уценку с помощью html2text . WMD по умолчанию использует только вашу первую текстовую область в качестве редактора уценки, но вы можете переопределить это, а также добавить предварительный просмотр - просто следуйте инструкциям в простых примерах, которые поставляются с WMD. API в любом случае меняется (и, к его чести, автор не скрывает этого), так как все это движется к более по-настоящему открытой концепции, так что не стоит сейчас подробно объяснять это или пытаться что-то придумать! -)

1 голос
/ 01 августа 2013

Будьте осторожны при использовании принятого ответа. По умолчанию разметка вашего текста не заботится об удалении небезопасных тегов. Злонамеренный пользователь может легко вставить HTML и даже может вставить теги сценария. Использование {{body_html | safe}} в шаблоне будет означать выполнение html или скрипта пользователя. Попробуйте сами.

0 голосов
/ 12 августа 2009

Очевидно, что преобразование старого HTML в уценку совершенно не нужно. Я применил фильтр django.contrib.markup.markdown к своим шаблонам, и HTML-код в устаревших записях базы данных был сразу передан. Уценка в устаревших записях также была отображена правильно.

Конечно, мое веб-приложение не позволяет пользователям изменять эти поля, поэтому можно позволить HTML проходить напрямую. Если бы это было поле, редактируемое пользователем, например комментарии или вики, этого решения было бы недостаточно. Вам нужно будет передать параметр safe в фильтр шаблонов уценки, который удалит весь HTML, и некоторое преобразование HTML в уценку будет необходимо для устаревших сообщений, написанных на HTML.

Другое решение, в этом случае, было бы написать новый фильтр шаблона, который обернул фильтр уценки. Это позволит проходить через старые сообщения HTML, но применит фильтр без унаследованных сообщений.

...