那年那日那朵花

".......(o´ω`o)......"

django 使用 markdown 代码高亮拾遗

2016-05-16 23:40 python django

我在添加markdown代码高亮的时候遇到了个问题,同样的代码在本地电脑上开发都是正常的,但是在部署上线上环境后,死活都高亮不出来。

在纠结了许久以后才发现,原来即使pip 安装了markdown,但是如果要代码高亮,还需要安装 pygments (- -),而线上virtualenv环境下我并没有安装pygments,所以功能无法实现。

另外默认的话代码块前是shebang#!的话,代码块是带行号的,这样由于布局可能在显示上会有问题,所以在shebang行前加上语言名,例如:::python ,就可以避免显示行号了。

官方文档的说明如下:

** If the first line of the code block contains a shebang, the language is derived from that and line numbers are used. **

** If the first line begins with three or more colons, the text following the colons identifies the language. The first line is removed from the code block before processing and line numbers are not used. **

下面代码高亮走一发,我觉得这个配色挺好看的。:D

#!/usr/bin/python
# -*- coding:utf-8 -*-
import paramiko,os,Log
class MySftp:
    def __init__(self,hostname,port,username,password):
        self.hostname=hostname
        self.username=username
        self.password=password
        self.port=port
        self.log=Log.log()

    def login(self):
        try:
            self.t = paramiko.Transport((self.hostname,self.port))
            self.t.connect(username=self.username,password=self.password)
            self.sftp = paramiko.SFTPClient.from_transport(self.t)
        except Exception,e:
            self.log.logger.error('sftp error %s',e)
            self.t.close()
            self.log.logger.info('connect  close')
            exit()

另附代码高亮的实现方法,参考了网上的很多方法,实现方式都很类似。

第一步

在你的django app 目录下面创建目录templatetags

第二步

在其中定义markdown模板过滤器,文件名可以叫做djangomarkdown.py,内容如下:

#!/usr/bin/env python
#_*_ coding:utf-8 _*_
import markdown

from django import template
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter(is_safe=True)
@stringfilter
def djangomarkdown(value):
    return mark_safe(markdown.markdown(force_unicode(value),
                                       extensions = ["nl2br","codehilite"],
                                       safe_mode=True,
                                       enable_attributes=False))

第三步

在github上搜pygments,下载你中意的css渲染,我这里用的是tango.css。

然后在模板上引用即可

<link type="text/css" rel="stylesheet" href="/static/css/tango.css">
...................................
...................................
{{ xxxxxxxxx|djangomarkdown }}

这样在模板上用过滤器渲染过的内容就会有代码高亮效果了。

心情

Cloudhu 个人随笔|built by django|

沪ICP备16019452号-1