0

我正在尝试在循环中使用选择语句,我需要以这种方式填充表:

<tr py:for="i in range(0,25)">
     <py:choose my_list[i]='0'>
         <py:when my_list[i]='0'><td>NOT OK</td></py:when>
         <py:otherwise><td>OK</td></py:otherwise>
     </py:choose>
...
...
</tr>

我在线上有一个错误<py:choose...>

TemplateSyntaxError: not well-formed (invalid token): line...

但是我不能很好地理解如何使用选择语句!如果我认为像 C 一样(在我看来更合乎逻辑),我只需要写:

<tr py:for="i in range(0,25)">
     <py:choose my_list[i]>
         <py:when my_list[i]='0'><td>NOT OK</td></py:when>
         <py:otherwise><td>OK</td></py:otherwise>
     </py:choose>
...
...
</tr>

你能帮助我吗?哦,my_list是一个字符串列表。然后,如果字符串0对我来说不正常,其他一切都正常。

4

1 回答 1

0

在 中py:choose,您无法访问Ithmy_list 的项目。相反,i设置为等于intfrom 范围。我认为这是一个人为的示例,并且您正在尝试访问Ith. my_list在这种情况下,您应该只迭代my_list而不是使用range

这是使用您当前方法的示例。错误py:choose本身就在:

from genshi.template import MarkupTemplate
template_text = """
<html xmlns:py="http://genshi.edgewall.org/" >
    <tr py:for="index in range(0, 25)">
         <py:choose test="index">
             <py:when index="0"><td>${index} is NOT OK</td></py:when>
             <py:otherwise><td>${index} is OK</td></py:otherwise>
         </py:choose>
    </tr>
</html>
"""
tmpl = MarkupTemplate(template_text)
stream = tmpl.generate()
print(stream.render('xhtml'))

但是,您可能应该更改list_of_intsmy_list,并直接对其进行迭代。或者更好的是,如果您必须从内部知道每个项目的索引my_list,请使用enumerate

from genshi.template import MarkupTemplate
template_text = """
<html xmlns:py="http://genshi.edgewall.org/" >
    <tr py:for="(index, item) in enumerate(list_of_ints)">
         <py:choose test="index">
             <py:when index="0"><td>index=${index}, item=${item} is NOT OK</td></py:when>
             <py:otherwise><td>${index}, item=${item} is OK</td></py:otherwise>
         </py:choose>
    </tr>
</html>
"""
tmpl = MarkupTemplate(template_text)
stream = tmpl.generate(list_of_ints=range(0, 25))
print(stream.render('xhtml'))

当然,这些示例是从 python 解释器运行的。您可以修改它以轻松使用您的设置。

高温高压

于 2014-11-05T03:01:56.023 回答