Usage: (if you save it as pigmentation.py as I did)
{% load pigmentation %} {% autoescape off %} {{ somevariable|pygmentize }} {% endautoescape %}
There already a few of this code around, but this one is pretty clean, and includes css. It also works in both the development server and Dreamhost (python2.4 in my django config) without any unicode problems.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | from django import template
import re
import pygments
import pygments.lexers as lexers
import pygments.formatters as formatters
register = template.Library()
regex = re.compile(r'<code>(.*?)</code>', re.DOTALL)
@register.filter(name='pygmentize')
def pygmentize(value):
try:
last_end = 0
to_return = ''
found = 0
for match_obj in regex.finditer(value):
code_string = match_obj.group(1)
try:
lexer = lexers.guess_lexer(code_string)
except ValueError:
lexer = lexers.PythonLexer()
pygmented_string = pygments.highlight(code_string, lexer, formatters.HtmlFormatter())
to_return = to_return + value[last_end:match_obj.start(1)] + pygmented_string
last_end = match_obj.end(1)
found = found + 1
to_return = to_return + value[last_end:]
to_return += u"<style>%s</style>" % formatters.HtmlFormatter().get_style_defs('.highlight')
return to_return
except:
return value
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 6 months ago
Comments
Hi,
I am getting some strange HTML characters like
etc showing up in between my pre tags.
Any idea why that could be?
#
No idea, maybe you're using an old version of django that doesn't autoescape?
#
Please login first before commenting.