環境 基本 実践 モデル アップロード デプロイ

DjangoでMarkdownを使う時はsafe(autoescape)を使わないとタグが表示されない

最終更新日 2023.02.18

Markdown を使うときは templatetags で定義した関数を使います。

<div>{{ article | parse | safe }}</div>

article は view から受けとった Markdown の文章です。parse は Markdown を HTML にする関数で、templatetags で定義されているとします。

x | ff(x) を意味するため、{{ article | parse }} は Markdown から翻訳された HTML です。

safe

{{ article | parse }} は HTML ですが、Django は自動的に HTML タグをエスケープして出力します。Django は > といった特殊な記号をそのまま解釈して文字にします。これではブラウザは HTML を解釈できません。

safe は Django の自動エスケープを除去する関数です。Markdown を使うときは

  • Markdown フック
  • safe フック

の 2 つを使うようにしよう。

メモ

templatetags には次のような関数が定義されています。

@register.filter
@stringfilter
def parse_markdown(value):
    md = markdown.Markdown()
    return md.convert(value)

templatetags は templates や static と同じ階層になるディレクトリで、テンプレートで呼び出すときは

{% load tags %}

を宣言してから使います。