【问题标题】:python/genshi newline to html <p> paragraphspython/genshi 换行到 html <p> 段落
【发布时间】:2009-08-10 23:16:36
【问题描述】:

我正在尝试使用 genshi 输出评论的内容,但我不知道如何将换行符转换为 HTML 段落。

这是一个应该是什么样子的测试用例:

输入:'foo\n\n\n\n\nbar\nbaz'

输出:&lt;p&gt;foo&lt;/p&gt;&lt;p&gt;bar&lt;/p&gt;&lt;p&gt;baz&lt;/p&gt;

我到处寻找这个功能。我在 genshi 或 python 的标准库中找不到它。我正在使用 TG 1.0。

【问题讨论】:

    标签: python turbogears genshi


    【解决方案1】:
    def tohtml(manylinesstr):
        return ''.join("<p>%s</p>" % line
              for line in manylinesstr.splitlines()
              if line)
    

    例如,

    print repr(tohtml('foo\n\n\n\n\nbar\nbaz'))
    

    发射:

    '<p>foo</p><p>bar</p><p>baz</p>'
    

    根据需要。

    【讨论】:

    • 我会说这是这里最好的一个。它满足了 OP 将无限数量的换行符转换为单个 &lt;p&gt; 的要求,并且具有与操作系统无关的额外优势,因为 splitlines()\n\r 或其任何组合处分隔。只是我的两分钱。
    【解决方案2】:

    Genshi 中可能有一个内置功能,但如果没有,它会为您完成:

    output = ''.join([("<p>%s</p>" % l) for l in input.split('\n')])
    

    【讨论】:

    • 这不会产生问题指定的输出。 >>> input = 'foo\n\n\n\n\nbar\nbaz' >>> output = ''.join([("

      %s

      " % l) for l in input .split('\n')]) >>> 输出 '

      foo

      bar

      baz

      '
    【解决方案3】:

    我知道您说 TG1 我的解决方案是 TG2,但可以向后移植或仅依赖于 webhelpers,但 IMO 所有其他实现都有缺陷。

    看看converters module nl2br 和 format_paragraphs。

    【讨论】:

    • 我尝试使用转换器模块,但是这两个函数都不能满足问题的要求。 >>> from webhelpers.html import converters >>> converters.format_paragraphs('foo\n\n\n\n\nbar\nbaz') u'

      foo

      \n\n

      bar \nbaz

      ' >>> converters.nl2br('foo\n\n\n\n\nbar\nbaz') 文字(u'foo
      \n
      \n
      \n
      \n
      \nbar
      \nbaz')
    • 原来的问题有缺陷。 format_paragraph 做正确的事。在 html 中输入并不意味着一个新段落。也就是说,补丁和改进是受欢迎的,代码真的很简单。
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2011-01-02
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    相关资源
    最近更新 更多