2011-11-02 44 views
0

我真的很努力讓TAL和變色龍/金字塔玩得很好。 。 。使用TAL,變色龍和金字塔重複元素的問題

我在金字塔視圖返回,例如,下列:

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

我真的停留在這一點,任何幫助,將不勝感激!

回答

3

奇怪。我認爲這應該工作。

無論如何,您在這裏使用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:也是變色龍多餘的。然後,您還可以使用屬性在模板中訪問,而不是字典訪問:

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

也許,而這樣做,你會解決的道路上你的實際問題。 ;-)

+0

感謝您的有用答案。但是,我仍然收到原始的''標記錯誤。我已更新該問題以顯示我的完整模板。我錯過了什麼愚蠢的東西嗎? – Edwardr

+1

我想我找到了。它應該是'tal:repeat =「行結果」'不'tal:重複「行結果」'。 (等號=缺少。) –

+0

aha,我只是一個查看器,感謝這個問題! – Brent81