2

djangoを利用したサイトがあります。現在、すべてのテキストフィールドは、生のHTMLを使用する単なる古いテキスト入力です。私には派手な編集者も何もいません。MarkdownとWMDを使い始めて、誰にとっても簡単にできるようにしたいと思います。

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

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

4

4 に答える 4

4

他の質問で述べたように、マークダウンを使用する場合の適切なパターンは、テキストをマークダウンおよび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データを処理する方法についての提案はありません。

于 2009-08-11T03:10:55.510 に答える
2

WMDはHtml-to-markdownを実行せず、その逆のみを実行します。html2textを使用してHTMLをマークダウンに変換できます。WMDはデフォルトで、最初のテキスト領域のみをマークダウンエディターとして使用しますが、それをオーバーライドしたり、プレビューを追加したりできます。WMDに付属する簡単な例の指示に従ってください。APIはとにかく変化しています(そして、彼の名誉のために、作者はこれについて何の謎もありません)。すべてがより真にオープンソースの概念に移行するので、今すぐ詳細に説明したり、何か凝ったことを試したりする価値はありません。 -)

于 2009-08-11T02:35:59.590 に答える
1

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

于 2013-08-01T13:43:44.403 に答える
0

どうやら古いHTMLをマークダウンに変換することは完全に不要です。テンプレートにdjango.contrib.markup.markdownフィルターを適用すると、レガシーデータベースレコードのHTMLが直接渡されました。非レガシーレコードのマークダウンも正しくレンダリングされました。

確かに、私のWebアプリケーションでは、ユーザーがこれらのフィールドを変更することは許可されていないため、HTMLを直接通過させても問題ありません。これがコメントやWikiなどのユーザーが編集可能なフィールドである場合、このソリューションでは不十分です。安全なパラメータをマークダウンテンプレートフィルタに渡す必要があります。これにより、すべてのHTMLが削除され、HTMLで記述されたレガシー投稿にはHTMLからマークダウンへの変換が必要になります。

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

于 2009-08-12T14:30:50.263 に答える