Исходный код: У меня есть следующая программа.
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
).
Что я пробовал:
- Чтение документации Генши.
- Поиск 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<del>1</del>2
Я также попробовал это, но вместо этого использовал genshi.builder.Element('del')
. Результаты совпадают, и я смог окончательно определить, что строка, возвращаемая numbers()
, экранируется после того, как происходит возврат.
Куча других вещей, которые я сейчас не могу вспомнить.