1

TALとカメレオン/ピラミッドを上手くプレイするのに本当に苦労しています。。。

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']"

私は本当にこれに固執しています、そしてどんな助けもいただければ幸いです!

4

1 に答える 1

5

変。これでうまくいくと思います。

とにかく、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>

そして多分、これをしている間、あなたは途中であなたの実際の問題を解決するでしょう。;-)

于 2011-11-02T14:16:22.917 に答える