使用django model的text格式去写blog会有很多局限的地方,所以添加markdown去展示会方便很多。
当时使用的django_markdown,过滤的时候对代码解析有问题,然后找了资料实现了,纪录下。
在app层新建一个templatetags目录,添加以下内容的文件,姑且叫custom_markdown.py
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
register = template.Library() #自定义filter时必须加上
@register.filter(is_safe=True) #注册template filter
@stringfilter #希望字符串作为参数
def custom_markdown(value):
return mark_safe(markdown.markdown(
value,
extensions=['markdown.extensions.fenced_code',
'markdown.extensions.codehilite'],
safe_mode=True,
enable_attributes=False))
路由需要加上markdown的路径
url(r'^markdown/', include('django_markdown.urls')),
对应模版层引用:
{% extends "base.html" %}
{% load custom_markdown %}
{% block custom_styles %}
<link href="/static/blog/css/monokai.css" rel="stylesheet"> #对markdown做高亮处理
{% endblock %}
{% block title %}
{{ article.title }}
{% endblock title %}
{% block content %}
<h1>{{ article.title }}</h1>
<div id="main">
{{ article.content | custom_markdown }}
</div>
但是markdown本身并没有自带高亮,所以看起来还是有点丑的,需要去加css文件对markdown代码做高亮处理
这里有一个开源markdown的css库:pygments-css
随便挑一个将其保存在static里引用到文章的页面即可。