2009-08-11 26 views
2

私はdjango-poweredサイトを持っています。現在、すべてのテキストフィールドは、生のHTMLを取る単純な古いテキスト入力です。私は素晴らしい編集者や何も持っていません。マークダウンとWMDを使い、誰もが簡単に使えるようにしたいと考えています。WebアプリケーションをHTMLからMarkdownに切り替えるにはどうすればいいですか?

すべてのHTMLをマークダウンに変換するために、データベースのすべてのテキストフィールドを調べるために何らかのスクリプトを実行する必要がありますか?マークダウンフィルターでHTMLを実行すると、反対側でも同じように表示されますか? WMDエディタはサーバーからHTMLを読み込み、ユーザーが編集できるようにMarkdownに変換しますか?

ここで正しい行動方法は何ですか?

答えて

0

明らかに、古いHTMLをマークダウンに変換するのは完全に不要です。テンプレートにdjango.contrib.markup.markdownフィルタを適用し、従来のデータベースレコードのHTMLをそのまま渡しました。非レガシーレコードのマークダウンも正しく表示されました。

私のWebアプリケーションでは、これらのフィールドをユーザーが変更できないため、HTMLをそのまま通過させることはできます。これがコメントやウィキのようなユーザ編集可能なフィールドだった場合、この解決策では十分ではありません。安全なパラメータをマークダウンテンプレートフィルタに渡す必要があります。このフィルタはすべてのHTMLを取り除き、HTMLで書かれた従来の投稿にはHTMLからマークダウンへの変換が必要になります。

この場合、もう1つの解決策は、マークダウンフィルタをラップした新しいテンプレートフィルタを作成することです。古いHTML投稿を通過させることができますが、安全なマークダウンフィルターを非旧版投稿に適用します。

2

WMDはHtml-to-markdownを実行しません。 html2textでHTMLをマークダウンに変換できます。デフォルトでWMDは最初のテキスト領域をマークダウンエディタとしてのみ使用しますが、WMDに付属の簡単な例の指示に従うだけでプレビューを追加することもできます。 APIはとにかく変化しています(そして、彼の信じるところでは、著者はこれを謎にはしません)。より完全なオープンソースのコンセプトに移行しているので、今すぐ詳細に説明する価値はありません。 - )

4

私がyour other questionで言及したように、マークダウンを使用するときの良いパターンは、データベースにマークダウン 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データをどのように処理するかについての提案はありません。

1

許容回答を使用する場合はに注意してください。デフォルトでは、テキストをマークダウンしても、安全でないタグは削除されません。悪意のあるユーザーは簡単にHTMLを挿入でき、スクリプトタグを挿入することもできます。テンプレートに{{body_html | safe}}を使用すると、ユーザーのhtmlやスクリプトを実行することになります。自分で試してみてください。

関連する問題