Неисправные повторяющиеся элементы с использованием TAL, Chameleon и Pyramid - PullRequest
0 голосов
/ 02 ноября 2011

Я действительно изо всех сил стараюсь, чтобы TAL и Chameleon / Pyramid играли хорошо. , ,

У меня есть представление в Pyramid, которое возвращает, например, следующее:

def view(request):
    return {'results' : [ {'name':'alice', 'value':22}, 
                          {'name':'bob', 'value':11},
                          {'name':'charlie', 'value':33} ] }

У меня есть шаблон, который содержит следующий бит HTML:

<!DOCTYPE html>
<html>
<head></head>
<body>
<table>
    <thead>
        <tr>
            <td>Keyword</td>
            <td class="center">Mean Position</td>
        </tr>
    </thead>
    <tbody>
        <tr tal:repeat"row results">
            <td>${row.name}</td>
            <td>${row.value}</td>
        </tr>
    </tbody>
</table>
</body>
</html>

Я надеюсь на вывод HTML следующего содержания:

<table>
    <thead>
    <tr class="odd">
        <td>Name</td>
        <td class="centre">Age</td>
    </tr>
    </thead>
    <tbody>
        <tr>
            <td>alice</td>
            <td>22</td>
        </tr>
        <tr>
            <td>bob</td>
            <td>11</td>
        </tr>            
        <tr>
            <td>charlie</td>
            <td>33</td>
        </tr>
    </tbody>
</table>

Однако при попытке запуска Pyramid выдает ошибку:

raise ParseError("Unexpected end tag.", token)
ParseError: Unexpected end tag.
- String:   "</tr>"

что я подумал довольно странно. Я удалил закрывающий <\tr>, а затем получил следующую ошибку:

NameError: row
- Expression: "python:row['name']"

Я действительно застрял в этом, и любая помощь будет признательна!

1 Ответ

4 голосов
/ 02 ноября 2011

Weird.Я думаю, что это должно сработать.

В любом случае, использование tal:replace здесь неправильно, поскольку оно заменит весь тег.То, что вы хотите, это заменить содержимое тега на tal:content:

<tr tal:repeat="row results">
    <td tal:content="python:row['name']">the name</td>
    <td tal:content="python:row['value']">1</td>
</tr>

* * * * * * * python: также излишне в Хамелеоне.Затем вы можете также использовать доступ к атрибутам вместо доступа к dict в шаблонах:

<tr tal:repeat="row results">
    <td tal:content="row.name">the name</td>
    <td tal:content="row.value">1</td>
</tr>

Наконец, вы можете использовать синтаксис подстановки ${} вместо tal:content.Это даст вам гораздо более компактное написание:

<tr tal:repeat="row results">
    <td>${row.name}</td>
    <td>${row.value}</td>
</tr>

И, возможно, при этом вы решите реальную проблему в пути.; -)

...