マークダウンフィルターのデフォルトの動作を変更して、改行をbrタグに変換するにはどうすればよいですか?
5 に答える
改行構文をいじるのは良い考えではないと思います...
ヘンリックのコメントに同意します。マークダウンドキュメントから:
Markdownを使用してブレークタグを挿入する場合は
<br />
、2つ以上のスペースで行を終了してから、returnと入力します。はい、これを作成するには少し手間がかかります
<br />
が、単純な「すべての改行は<br />
」ルールはMarkdownでは機能しません。Markdownの電子メールスタイルのブロッククォートと複数段落のリストアイテムは、ハードブレイクを使用してフォーマットすると、最も効果的に機能し、見栄えも良くなります。
他のDjangoマークアップオプション、テキスタイル、再構築されたテキストを見たことがありますか?それらの構文はあなたにより適しているかもしれません。
しかし、それでもしたい場合は...
大まかな準備ができた方法は、markdownフィルターとlinebreaksbrフィルターをチェーンすることです。
{{ value|markdown|linebreaksbr }}
これにより、マークダウンフィルターが実行され、次にlinebreaksbrフィルターが実行されます。これは。に置き換え\n
られ<br />
ます。おそらく、改行が多すぎることになりますが、少なすぎるよりはましだと思います。
あなたがそれよりも優れた解決策であれば、あなたは
Johnが答えで示唆しているように、カスタムフィルターを作成します。
Djangoが使用するpython-markdownライブラリに飛び込み、目的の改行構文を実装する拡張機能を記述します。次に、フィルターで拡張機能を使用します
{{ value|markdown:"linebreakextension" }}
編集: 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)
拡張機能を使用および作成するためのドキュメントの開始点は次のとおりです。
markdown を呼び出すカスタム フィルターを記述し、その出力を置換することができます。
文字をまたはlinebreaks
に変換するフィルターがあるようです。linebreaksまたはlinebreaksbr
を参照してください。\n
<br>
<p>