The default Django urlize filter does not work with html nicely so here I've used an HTML parser BeautifulSoup to quickly search through each text node and run the django urlize filter on it.
Optimizations could be made to include a regex in the soup.findAll() method's text argument to only search those text nodes which matched a url pattern. You could also modify the method to convert the text to urls, such as using your own custom url filter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
@register.filter("urlize_html") def urlize_html(html): """ Returns urls found in an (X)HTML text node element as urls via Django urlize filter. """ try: from BeautifulSoup import BeautifulSoup from django.utils.html import urlize except ImportError: if settings.DEBUG: raise template.TemplateSyntaxError, "Error in urlize_html The Python BeautifulSoup libraries aren't installed." return html else: soup = BeautifulSoup(html) textNodes = soup.findAll(text=True) for textNode in textNodes: urlizedText = urlize(textNode) textNode.replaceWith(urlizedText) return str(soup)
More like this
- Month / Year SelectDateWidget based on django SelectDateWidget by pierreben 2 weeks, 3 days ago
- Python Django CRUD Example Tutorial by tuts_station 1 month ago
- Browser-native date input field by kytta 2 months, 2 weeks ago
- Generate and render HTML Table by LLyaudet 2 months, 3 weeks ago
- My firs Snippets by GutemaG 3 months ago