python
  • templates
  • cherrypy
  • genshi
  • 2014-11-04 3 views 0 likes 
    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, то для меня это НЕ ОК, все остальное в порядке.

    ответ

    0

    В пределах py:choose у вас нет доступа к элементу Ith my_list. Вместо этого i устанавливается равным int из диапазона. Я предполагаю, что это надуманный пример, и вы пытаетесь получить доступ к значению Ithmy_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_ints к my_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. Вы можете изменить это, чтобы легко работать с вашей настройкой.

    HTH

    +0

    Спасибо! мы находимся рядом с решением ... Мне нужно знать, что в I-м укусе написано «0», тогда мне нужно сделать py: когда значение my_list [i], а не индекс. Теперь у меня такая же ошибка, но на py: когда строка, потому что я пишу: ' ...' I даже пытались с помощью user2174050

    +0

    Возможно, вы не понимаете перечисление, или для циклов. Чтобы изменить второй пример на то, что вы хотите, измените 'list_of_ints' на' my_list' и замените '' с помощью ''. – VooDooNOFX

     Смежные вопросы

    • Нет связанных вопросов^_^