如何更改降价过滤器中的默认行为,以便将换行符转换为br标记?
答案 0 :(得分:5)
我同意Henrik的评论。来自markdown docs:
如果您想使用Markdown插入
<br />
中断标记,则结束包含两个或更多空格的行,然后键入return。是的,这需要花费更多精力来创建
<br />
,但是简单的“每个换行符是<br />
”规则对Markdown不起作用。 Markdown的电子邮件风格的区块清单和多段列表项目最好 - 并且看起来更好 - 当您使用硬中断格式化它们时。
您是否看过其他Django标记选项,纺织品和重组文本?他们的语法可能更适合你。
粗略且准备好的方法是将降价和linebreaksbr过滤器链接起来。
{{ value|markdown|linebreaksbr }}
这会运行降价过滤器,然后是linebreaksbr过滤器,它会将\n
替换为<br />
。你可能最终会得到太多的换行符,但这对你来说可能比太少更好。
如果你是一个比这更好的解决方案,你可以
写一个自定义过滤器,正如约翰在答案中建议的那样。
深入了解Django使用的python-markdown库,以及实现所需换行语法的write an extension。然后,您将使用带过滤器的扩展名
{{ value|markdown:"linebreakextension" }}
答案 1 :(得分:5)
编辑:截至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)
Here is the starting point in the docs用于使用和编写扩展程序。
答案 2 :(得分:1)
您可以在"break-on-newline": True
设置中添加extras
来覆盖默认的MARKDOWN_DEUX_STYLES:
MARKDOWN_DEUX_STYLES = {
"default": {
"extras": {
"code-friendly": None,
"break-on-newline": True,
},
"safe_mode": "escape",
}
}
python-markdown2的
换行符:当
时,将单个换行符替换为
是的。
答案 3 :(得分:0)
你可以写一个调用markdown的custom filter,然后输出replace。
答案 4 :(得分:0)
似乎有linebreaks
过滤器可将\n
个字符转换为<br>
或<p>
。
请参阅linebreaks或linebreaksbr。