Django smartspaceless
This post is also available in Polski
Default django spaceless tag is weird, it consumes all spaces between tags and none inside of them. It’s good for small parts of site but…
…But I like my html to be cleared of all unnecessary mess which in many cases end up like this:
<a href="...">link1</a> <a href="...">link2</a>
generates awful:
link1link2
In addition if you like having your templates indented it leaves awful things like:
<div>
Test text testt
</div>
Here’s my “smart” version of strip_spaces_between_tags which can be used with overrided spaceless template tag:
def strip_multiple_spaces_between_tags(value):
"""Returns the given HTML with multiple spaces between tags removed."""
def tagcheck(obj, prefix='', sufix=''):
tag = obj.group(1).lower()
if tag[0] == '/':
tag = tag[1:]
if tag != 'pre':
return '%s<%s>%s' % (prefix, ''.join(obj.groups('')), sufix)
return obj.group(0)
def tagprecheck(obj):
return tagcheck(obj, sufix=' ')
def tagpostcheck(obj):
return tagcheck(obj, prefix=' ')
value = force_unicode(value)
value = re.sub(r'<(/?[\w]+)([^>]*)>\s{2,}', tagprecheck, value);
value = re.sub(r'\s{2,}<(/?[\w]+)([^>]*)>', tagpostcheck, value)
value = re.sub(r'>\s{2,}<', '> <', value)
return value
strip_multiple_spaces_between_tags = allow_lazy(strip_multiple_spaces_between_tags, unicode)
This does few things:
- it removes all multiple spaces between tags,
- it removes all multiple spaces at from “<tag> HERE text HERE </tag>” on all tags except pre.
If you find it useful or you have fix/extension to it (any other tag I should think of?) please feel free to comment.
English
Polski 


