Markdown(或者markdown2)+Pygments 实现代码高亮
Markdown部分
1、安装markdown pip install markdown
2、在view.py中导入包 from markdown import markdown
3、使用markdown()将需要用markdown格式解析的内容(字符串)封装起来。 注:models里面有一个Article类,Article里面有一项是content存储博客内容。
def detail(request, id):
try:
post = Article.objects.get(id=str(id))
#for markdown test
post.content = markdown(post.content)
except Article.DoesNotExist:
raise Http404
return render(request, 'post.html', {'post' : post})
4、模板显示 {{ post.content | safe}},注意使用了safe过滤器,防止内容在输出前被解析。
ps:和这个问题是一个原因,django数据库里Html代码,如何在前台让浏览器正确解析?
Pygments部分
1、官网下载最新的版本的Pygments。
2、运行如下命令pygmentize -S default -f html -a .codehilite > code.css,在文件夹下会发现生成了code.css文件,将这个css文件加入到你的static文件夹下style里面(随便你放哪里找得到就好)。
3、在需要高亮的html文件里面导入刚刚生成的css文件,例如:
<link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}styles/code.css"/>
4、还记得刚刚代码里面的post.content = markdown(post.content)吧,在后面加上[‘codehilite’],即为post.content = markdown(post.content,[‘codehilite’])。
5、刷新前台,显示代码已经高亮。
markdown2:
参考markdown,但是最好在post.content = markdown(post.content,,[‘codehilite’], extras=[‘fenced-code-blocks’])
其中,extras是只有代码被``` ```包围起来才会生效(```离周围要至少一行的空,不是单引号,是1旁边的符号),且在第一个```处指定语言,否则会不高亮,比如```c。
更好的文章:
http://fatsoon.com/2014/07/26/2014-07-26-use-highlite-in-django/
评论详情
共1条评论