djangoでマークダウンを使うmarkdownx
| 登録日 | :2024/01/21 06:39 |
|---|---|
| カテゴリ | :python django |
markdownxを使うことでpython djangoにてマークダウンが使える。
参考URL)
Djangoで使いたいからPythonでmarkdownをHTML変換する
Quita:Djangoでmarkdown対応のアプリを作った時のメモ
Python-Markdown 3.5.2 documentation
ブログを作成するときに、markdownが使えるのは非常に便利(デザインを簡単に指定できる)
ライブラリのインストール
まずライブラリをインストールする。
pip install django-markdown
CSSでデザインを調整するためにPygmentsをインストールしておく。
pip install Pygments
Djangoに設定を追加
settings.py ファイルに以下のように markdown を追加します。
INSTALLED_APPS = [
# 他のアプリケーション
'markdown',
]
DjangoのモデルにMarkdownフィルターを追加します。
ブログの記事モデルやビューでMarkdownを使用する場合、markdown フィルターを使います。models.py の例:
from django.db import models
from markdownx.models import MarkdownxField
class BlogPost(models.Model):
title = models.CharField(max_length=200)
content = MarkdownxField()
# 他のフィールドやメソッド
テンプレート(HTML)でMarkdownフィールドを表示させます。
テンプレートでMarkdownをHTMLに変換して表示するには、safe フィルターを使います。(safeがないと特殊文字でエラーが出るようです)
{{ blog_post.content|markdown|safe }}
さらに、コードや数式に対応させるには、CSSの読み込みや、Markdownxの拡張機能が必要になります。
Prismを追加する
<head>
<!-- 他の head セクションの要素 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.24.1/themes/prism.min.css" />
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.24.1/components/prism-core.min.js"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.24.1/plugins/line-numbers/prism-line-numbers.min.js"></script>
<!-- 他のプラグインの読み込み -->
</head>
PygmentsでCSSを作成する
monokai スタイルのCSSを生成する方法は以下です。
pygmentize -S monokai -f html -a .highlight > monokai.css
作成したスタイルをDjangoに適用します。
<link rel="stylesheet" href="{% static 'css/monokai.css' %}">
数式に対応
以下のようにスタイルを適用します
<script>
MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']]
}
};
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-mml-chtml.js"></script>
settings.pyの設定
settings.pyでDjangoから読み込むMarkdownの拡張機能を指定します。
# add for markdownx
MARKDOWNX_MARKDOWN_EXTENSIONS = [
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.tables',
'markdown.extensions.toc',
'markdown.extensions.fenced_code',
'markdown.extensions.abbr',
'markdown.extensions.attr_list',
'markdown.extensions.def_list',
'markdown.extensions.footnotes',
'markdown.extensions.md_in_html',
'markdown.extensions.nl2br',
]