【问题标题】:Trouble repeating elements using TAL, Chameleon and Pyramid使用 TAL、Chameleon 和 Pyramid 重复元素时遇到问题
【发布时间】:2011-12-20 08:15:10
【问题描述】:

我真的很难让 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>"

我认为这很奇怪。我删除了关闭&lt;\tr&gt;,然后得到以下错误:

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

我真的坚持这一点,任何帮助将不胜感激!

【问题讨论】:

    标签: python pyramid chameleon template-tal


    【解决方案1】:

    很奇怪。我认为这应该可行。

    无论如何,您在这里使用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: 在 Chameleon 中也是多余的。然后,您还可以在模板中使用属性访问而不是字典访问:

    <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>
    

    也许,在这样做的同时,您会在途中解决您的实际问题。 ;-)

    【讨论】:

    • 感谢您的帮助。但是,我仍然收到原始的 &lt;tr&gt; 标签错误。我已经更新了问题以显示我的完整模板。我错过了什么愚蠢的事情吗?
    • 我想我找到了。它应该是tal:repeat="row results" 而不是tal:repeat"row results"。 (等号 = 缺失。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2014-01-02
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    相关资源
    最近更新 更多