Computer広告を含む記事です
PythonのMarkdownで、コードの複数行表示とシンタックスハイライトに対応し、HTMLに表示する
インストール
pip install markdown
pip install pygments
コード
from markdown import markdown
codehilite_configs = {
'codehilite': {
'pygments_style': 'solarized-light',
'noclasses': True
}
}
def content_as_markdown(self):
return markdown(
self,
extensions=['fenced_code', 'codehilite'],
extension_configs=codehilite_configs
)
- pygmentsはimportしなくていい
- extensionsで
fenced_code
とcodehilite
を設定
fenced_code
は、Markdownでコードの複数行表示に対応するために必要
- 拡張機能をすべて追加する場合は、extensionsに
extra
を設定
- extensions=[‘extra’, ‘codehilite’]
- コードのハイライトに対応するには、extension_configsを設定する必要がある
- 今回は、ハイライトのスタイルに
solarized-light
を設定している
- ハイライト表示するためには、
'noclasses': True
が必要
Djangoのmodels.pyでの設定例
from django.db import models
from django.utils.safestring import mark_safe
from markdown import markdown
CATEGORY = (('python', 'python'), ('django', 'django'), ('flask','flask'), ('html','html'), ('css','css'))
codehilite_configs = {
'codehilite': {
'pygments_style': 'solarized-light',
'noclasses': True
}
}
class ConponentModel(models.Model):
title = models.CharField('タイトル', max_length=64)
content = models.TextField('内容')
category = models.CharField(
max_length=16,
choices=CATEGORY
)
created_at = models.DateTimeField('作成日', auto_now_add=True)
def content_as_markdown(self):
return mark_safe(markdown(
self.content,
extensions=['fenced_code', 'codehilite'],
extension_configs=codehilite_configs
))
def __str__(self) -> str:
return self.title
class Meta:
db_table = 'conponent'