5

マークダウンフィルターのデフォルトの動作を変更して、改行をbrタグに変換するにはどうすればよいですか?

4

5 に答える 5

5

改行構文をいじるのは良い考えではないと思います...

ヘンリックのコメントに同意します。マークダウンドキュメントから:

Markdownを使用してブレークタグを挿入する場合は<br />、2つ以上のスペースで行を終了してから、returnと入力します。

はい、これを作成するには少し手間がかかります<br />が、単純な「すべての改行は<br />」ルールはMarkdownでは機能しません。Markdownの電子メールスタイルのブロッククォートと複数段落のリストアイテムは、ハードブレイクを使用してフォーマットすると、最も効果的に機能し、見栄えも良くなります。

他のDjangoマークアップオプション、テキスタイル、再構築されたテキストを見たことがありますか?それらの構文はあなたにより適しているかもしれません。


しかし、それでもしたい場合は...

大まかな準備ができた方法は、markdownフィルターとlinebreaksbrフィルターをチェーンすることです。

{{ value|markdown|linebreaksbr }}

これにより、マークダウンフィルターが実行され、次にlinebreaksbrフィルターが実行されます。これは。に置き換え\nられ<br />ます。おそらく、改行が多すぎることになりますが、少なすぎるよりはましだと思います。

あなたがそれよりも優れた解決策であれば、あなたは

  1. Johnが答えで示唆しているように、カスタムフィルターを作成します。

  2. Djangoが使用するpython-markdownライブラリに飛び込み、目的の改行構文を実装する拡張機能を記述します。次に、フィルターで拡張機能を使用します

    {{ value|markdown:"linebreakextension" }}

于 2009-11-24T23:33:32.430 に答える
5

編集: 2011 年 6 月末の時点で、以下の拡張機能が Python Markdown に含まれるようになりました。

これは私が書いた Markdown 拡張機能で、現在私のサイトでテストしており、あなたが望むことを正確に行うことができます:

"""
A python-markdown extension to treat newlines as hard breaks; like
StackOverflow and GitHub flavored Markdown do.

"""
import markdown


BR_RE = r'\n'

class Nl2BrExtension(markdown.Extension):

    def extendMarkdown(self, md, md_globals):
        br_tag = markdown.inlinepatterns.SubstituteTagPattern(BR_RE, 'br')
        md.inlinePatterns.add('nl', br_tag, '_end')


def makeExtension(configs=None):
    return Nl2BrExtension(configs)

これを mdx_nl2br.py というファイルに入れ、PYTHONPATH に入れました。次に、次のように Django テンプレートで使用できます。

{{ value|markdown:"nl2br" }}

通常のコードで使用したい場合は、次のようにすることができます。

import markdown
md = markdown.Markdown(safe_mode=True, extensions=['nl2br'])
converted_text = md.convert(text)

拡張機能を使用および作成するためのドキュメントの開始点は次のとおりです。

于 2011-03-03T16:00:09.583 に答える
0

markdown を呼び出すカスタム フィルターを記述し、その出力を置換することができます。

于 2009-11-24T19:24:40.700 に答える
0

文字をまたはlinebreaksに変換するフィルターがあるようです。linebreaksまたはlinebreaksbr を参照してください。\n<br><p>

于 2009-11-26T10:36:46.943 に答える