源氏:for循环插入换行符

时间:2018-11-06 16:33:04

标签: python genshi

源代码:我有以下程序。

import genshi
from genshi.template import MarkupTemplate

html = '''
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/">
        <head>
        </head>
        <body>
            <py:for each="i in range(3)">
                <py:choose>
                    <del py:when="i == 1">
                        ${i}
                    </del>
                    <py:otherwise>
                        ${i}
                    </py:otherwise>
                </py:choose>
            </py:for>
        </body>
    </html>
'''

template = MarkupTemplate(html)
stream = template.generate()
html = stream.render('html')

print(html)

预期的输出:数字连续打印,它们之间没有空格(最关键的是没有换行符)。

<html>
    <head>
    </head>
    <body>
            0<del>1</del>2
    </body>
</html>

实际输出:它输出以下内容:

<html>
    <head>
    </head>
    <body>
            0
            <del>1</del>
            2
    </body>
</html>

问题:如何消除换行符?我可以通过从最终的HTML中删除空格来处理领先的空格,但是我不知道如何摆脱换行符。我需要将for循环的内容显示为单个连续的“单词”(例如012而不是0 \n 1 \n 2)。

我尝试过的事情:

  • 阅读Genshi文档。
  • 搜索StackOverflow
  • 搜索Google
  • 使用<?python ...code... ?>代码块。由于<del>标记中的插入号已转义并显示,因此无法使用。

    <?python
        def numbers():
            n = ''
            for i in range(3):
                if i == 1:
                    n += '<del>{i}</del>'.format(i=i)
                else:
                    n += str(i)
            return n
    ?>
    ${numbers()}
    

    产生0&lt;del&gt;1&lt;/del&gt;2 我也尝试过,但是改用genshi.builder.Element('del')。结果是相同的,并且我能够确定性地确定numbers()返回的字符串在返回之后被转义了。

  • 目前我不记得的其他事情。

1 个答案:

答案 0 :(得分:0)

不理想,但是我终于找到了可以接受的解决方案。诀窍是将给定标签的结束插入标记放在下一个标签的开始插入标记之前的下一行。

<body>
    <py:for each="i in range(3)"
        ><py:choose
            ><del py:when="i == 1">${i}</del
            ><py:otherwise>${i}</py:otherwise
        ></py:choose
    </py:for>
</body>

来源:https://css-tricks.com/fighting-the-space-between-inline-block-elements/

如果有人有更好的方法,我很想听听。