import re from contextlib import suppress import markdown from django.utils.html import strip_tags def render_markdown(text: str) -> str: """Render a markdown string to HTML.""" with suppress(Exception): return markdown.markdown(text, extensions=["tables", "fenced_code", "nl2br"]) return text def strip_markdown(text: str) -> str: """Render markdown to HTML then strip all tags, collapsing whitespace.""" with suppress(Exception): html = render_markdown(text) plain = strip_tags(html) return re.sub(r"\s+", " ", plain).strip() return text