我该如何更改Markdown过滤器的默认行为,使其将换行符转换为br标签?
编辑:截至2011年6月底,以下扩展现已包含在Python Markdown中。
这是一个Markdown扩展,我编写并正在我的网站上进行测试,以完全满足您的要求:
"""
A python-markdown extension to treat newlines as hard breaks; like
StackOverflow and GitHub flavored Markdown do.
"""
import markdown
BR_RE = r'\n'
class Nl2BrExtension(markdown.Extension):
def extendMarkdown(self, md, md_globals):
br_tag = markdown.inlinepatterns.SubstituteTagPattern(BR_RE, 'br')
md.inlinePatterns.add('nl', br_tag, '_end')
def makeExtension(configs=None):
return Nl2BrExtension(configs)
我将这段代码放在一个名为mdx_nl2br.py的文件中,并将其放在PYTHONPATH上。然后你可以在Django模板中像这样使用它:
{{ value|markdown:"nl2br" }}
import markdown
md = markdown.Markdown(safe_mode=True, extensions=['nl2br'])
converted_text = md.convert(text)
我同意 Henrik 的评论。根据 markdown 文档:
当你想要使用 Markdown 插入
<br />
换行标签时,需要在一行的末尾加上两个或两个以上的空格,然后按回车键。是的,这需要更多的努力来创建一个
<br />
,但是简单的“每一行换行都是<br />
”规则对于 Markdown 来说是行不通的。当你用硬断行格式化电子邮件样式的引用块和多段落列表项时,Markdown 的效果最好,并且看起来更好。
您是否看过 Django 的其他标记选项,如 textile 和 restructuredtext?它们的语法可能更适合您。
一个粗略但有效的方法是链接 markdown 和 linebreaksbr 过滤器。
{{ value|markdown|linebreaksbr }}
\n
替换为 <br />
。你可能会得到太多的换行符,但这可能比太少更好。{{ value|markdown:"linebreakextension" }}
extras
设置中添加"break-on-newline": True
来覆盖默认的MARKDOWN_DEUX_STYLES:MARKDOWN_DEUX_STYLES = {
"default": {
"extras": {
"code-friendly": None,
"break-on-newline": True,
},
"safe_mode": "escape",
}
}
break-on-newline: 当为True时,将单个换行符替换为
。