DjangoでMarkdownをHTMLで表示する

インストール

pip install markdown

models.py

from django.db import models
from django.conf import settings
from django.utils.safestring import mark_safe
from markdown import markdown

class Bank(models.Model):
    name = models.CharField('銀行名', max_length=128)
    currency = models.CharField('通貨', max_length=16)
    balance = models.DecimalField('残高', max_digits=12, decimal_places=2)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作成者', on_delete=models.CASCADE)
    created_at = models.DateTimeField('登録日',auto_now_add=True)

    class Meta:
        db_table = 'bank'

    def content_as_markdown(self):
        return mark_safe(markdown(self.name))

    def __str__(self):
        return self.name

content_as_markdown関数で、nameにmarkdownで記述した内容をHTMLに変換して返す。

htmlでタグをエスケープしなくてもいいように、mark_safeしている。

関数名は自由に設定してOK。

html

<div>
    {% for md in object_list %}
        {{ md.content_as_markdown }}
    {% endfor %}
</div>

この場合、Markdownで記述したnameの内容がHTMLに変換されて表示される。