我目前在我的博客网站上工作。外观上最重要的一点是多语言语法高亮显示器。所以我决定使用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;
这样的奇怪人物我需要有关如何处理它的建议。在此先感谢您的回复。