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
- get_object_or_none by azwdevops 1 month ago
- Mask sensitive data from logger by agusmakmun 3 months ago
- Template tag - list punctuation for a list of items by shapiromatron 1 year, 5 months ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 1 year, 5 months ago
- Serializer factory with Django Rest Framework by julio 2 years ago
Comments
Please login first before commenting.