Grep template tag for Django
Grep template tag for Django
July 15, 2009
Nice and easy couple of Django template tags that filter lines of text using a regular expression. I had a block of text where I wanted to remove some of the lines but not others.
You can use grep to remove any lines that do not match your pattern:
>>> s = 'The quick brown fox'
>>> grep(s, 'quick')
u'The quick brown fox'
And its converse grepv to remove any lines that do match your pattern:
>>> s = 'The quick brown fox'
>>> grepv(s, 'quick')
''
>>> s2 = s + '\nJumps over the lazy dog'
>>> grepv(s2, 'quick')
u'Jumps over the lazy dog'
Stick it in a module in your Django application (documentation), then load it up at the top of a template.
from django import template
from django.template.defaultfilters import stringfilter
import re
register = template.Library()
@register.filter
@stringfilter
def grep(value, arg):
"""Lines that do not match the regular expression are removed."""
pattern = re.compile(arg)
lines = [line for line in re.split(r'[\r\n]', value) if pattern.search(line)]
return '\n'.join(lines)
@register.filter
@stringfilter
def grepv(value, arg):
"""Lines that match the regular expression are removed."""
pattern = re.compile(arg)
lines = [line for line in re.split(r'[\r\n]', value) if not pattern.search(line)]
return '\n'.join(lines)
Last updated on