2012-06-26 39 views
7

我在學習金字塔,看起來他們試圖讓人們使用變色龍而不是mako,所以我想我會給變色龍一個機會。我喜歡它,我可以在模板中做基本的事情,比如if和for循環,但我不知道如何讓消息閃爍出現。我的變色龍模板如何接受來自金字塔框架的消息?

在金字塔教程中,他們在todo list中執行此操作,但在wiki示例中它們不執行此操作。根據instructions about sessions和使用todolist教程作爲例子,我已經能夠讓我的應用程序創建消息,但我無法在我的模板中接收它們。概括地說,我想知道如果變色龍具有此鯖代碼當量:

% if request.session.peek_flash(): 
    <div id="flash"> 
    <% flash = request.session.pop_flash() %> 
    % for message in flash: 
    ${message}<br> 
    % endfor 
    </div> 
    % endif 
+0

[沒有這樣的偏好](https://groups.google.com/d/msg/pylons-discuss/enal9DcMiAM/T_b4Zoe1crMJ) – Tshepang

回答

10

的(另)等效於變色龍是:

<div id="flash" tal:condition="request.session.peek_flash()"> 
    <span tal:omit-tag="" 
     tal:repeat="message request.session.pop_flash()"> 
     ${message}<br> 
    </span> 
</div> 

tal:omit-tag attribute是可選的;它會從輸出中刪除<span>標記,因爲它僅用作虛擬標記以將重複附加到該標記。通過刪除它,變色龍模板的輸出將匹配Mako示例。

查看Chameleon documentation瞭解模板語言如何工作的介紹和完整說明。

+0

如果用戶尚未訪問您的網站,請求的訪問.session''會自動創建一個會話。雖然這可能不是問題,但這意味着如果只有少數用戶有會話(例如只有管理員),那麼您將爲您的服務器和可能永遠不會有會話的客戶添加不需要的開銷。如果這涉及到你,我的建議是在引用request.session之前檢查vars(request)中的'''session'。 – davidjb