Django - 使用pygments突出显示语法

时间:2015-02-27 15:16:50

标签: django syntax-highlighting pygments

我目前在我的博客网站上工作。外观上最重要的一点是多语言语法高亮显示器。所以我决定使用Pygments库,并编写了一些代码:

from django import template
from pygments import highlight
from pygments.formatters.html import HtmlFormatter
from pygments.lexers import get_lexer_by_name, guess_lexer
from django.utils.safestring import mark_safe
from bs4 import BeautifulSoup

register = template.Library()

@register.filter(is_safe=True)
def highlighter(content):

   soup = BeautifulSoup(unicode(content))
   codeBlocks = soup.findAll(u'code')

   for i,block in enumerate(codeBlocks):
    if block.has_attr(u'class'):
        language = block[u'class']
    else:
        language = u'text'
    try:
        lexer = get_lexer_by_name(language[0])
    except ValueError:
        try:
            lexer = guess_lexer(unicode(block))
        except ValueError:
            lexer = get_lexer_by_name(language[0])

    highlighting = highlight(unicode(block), lexer, HtmlFormatter())
    block.replaceWith(highlighting)

   return mark_safe(unicode(soup))

在我的模板中,我使用这样的思考:

<p>{{ post.en_post_content|highlighter|safe|linebreaks}}</p>

突出显示效果很好但我不能保证安全,因为这是我收到的: http://i.gyazo.com/a2557c861e20a826b28cb5c261e6020f.png

我也担心像#34;&amp;#39&#34;

这样的奇怪人物

我需要有关如何处理它的建议。在此先感谢您的回复。

0 个答案:

没有答案