如何让django的降价过滤器将回车转换为<br/>?

时间:2009-11-24 13:49:00

标签: python django markdown

如何更改降价过滤器中的默认行为,以便将换行符转换为br标记?

5 个答案:

答案 0 :(得分:5)

我不认为搞乱换行语法是个好主意......

我同意Henrik的评论。来自markdown docs

  

如果您想使用Markdown插入<br />中断标记,则结束包含两个或更多空格的行,然后键入return。

     

是的,这需要花费更多精力来创建<br />,但是简单的“每个换行符是<br />”规则对Markdown不起作用。 Markdown的电子邮件风格的区块清单和多段列表项目最好 - 并且看起来更好 - 当您使用硬中断格式化它们时。

您是否看过其他Django标记选项,纺织品和重组文本?他们的语法可能更适合你。


但是如果你还想...

粗略且准备好的方法是将降价和linebreaksbr过滤器链接起来。

{{ value|markdown|linebreaksbr }}

这会运行降价过滤器,然后是linebreaksbr过滤器,它会将\n替换为<br />。你可能最终会得到太多的换行符,但这对你来说可能比太少更好。

如果你是一个比这更好的解决方案,你可以

  1. 写一个自定义过滤器,正如约翰在答案中建议的那样。

  2. 深入了解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的

Documentation

  

换行符:当
时,将单个换行符替换为
  是的。

答案 3 :(得分:0)

你可以写一个调用markdown的custom filter,然后输出replace

答案 4 :(得分:0)

似乎有linebreaks过滤器可将\n个字符转换为<br><p>
请参阅linebreakslinebreaksbr