This custom filter is helpful if you want to convert plain text to include html line breaks but you aren't sure if the text is actually plain text or if it already contains html line breaks.
First the filter looks for if the text contains any br, p, or table tags, if it does the text is returned as is. If it doesn't then the same functionality as the linebreaks filter is applied to the text.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def autolinebreaks(value, autoescape=None): """ Checks if the content is html or plain text if plain text replaces line breaks with appropriate HTML; a single newline becomes an HTML line break (``<br />``) and a new line followed by a blank line becomes a paragraph break (``</p>``). """ import re html_match = re.compile('<br>|<br />|<p>|<table>', re.IGNORECASE) if not html_match.search(value): from django.utils.html import linebreaks autoescape = autoescape and not isinstance(value, SafeData) return mark_safe(linebreaks(value, autoescape)) else: return value autolinebreaks.is_safe = True autolinebreaks.needs_autoescape = True autolinebreaks = stringfilter(autolinebreaks) register.filter(autolinebreaks)
More like this
- Serializer factory with Django Rest Framework by julio 3 months, 3 weeks ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 4 months, 1 week ago
- Help text hyperlinks by sa2812 5 months, 1 week ago
- Stuff by NixonDash 7 months, 1 week ago
- Add custom fields to the built-in Group model by jmoppel 9 months, 2 weeks ago