2013-02-23 48 views
3

我已經使用pyramid框架來構建一個大型的web應用程序。突破變色線

除此之外,此應用程序允許用戶在文本區域表單域中輸入文本。然後將該文本保存到數據庫中,當然可以再次讀出並在稍後顯示。

要顯示內容我正在使用Chameleon Template Engine

這工作正常,除了換行不正確(根本不顯示)。這可能是由於輸入到文本區域的換行符在通過Chameleon顯示時不會在HTML中引起新行。如何解決這個問題?

它不會幫助替換新行數<br> -Tags,因爲默認情況下變色龍會轉義所有HTML標記。我意識到可以停用此功能的事實,但我不想這樣做以避免跨站點腳本。

+0

** **比**大? – Tshepang 2013-02-23 21:36:34

回答

2

您需要將文本分成幾行,然後使這個使用循環和<br/>標籤:

<span tal:omit-tag="" 
     tal:repeat="line text_with_newlines.splitlines()"> 
    ${line}<br /> 
</span> 

它使用str.splitlines() method拆就換行文本,然後循環增加了一個<br />在文本的每一行之後打破標籤。

你很對不在視圖中這樣做,然後強制變色龍通過設置structure:標誌來接受插入的<br />標籤。幸運的是,無論如何,這絕對沒有必要。

+0

謝謝,這工作正常。 – Meneldur 2013-02-24 11:15:25

2

另一種可能是做一些類似如下:

import webhelpers.html.tags as t 
s = t.literal(t.BR).join(s.split(t.NL)) 

當然你也可以用它創建一個輔助功能。

+0

這種方法的問題在於,您必須關閉自動HTML轉義變色龍的功能;你必須首先手動轉義''',然後將換行符變成中斷標記,然後使用'structure:'開關插入結果。 OP理所當然地不想這樣做;當你逃避自己時,總會有風險。 – 2013-02-24 11:54:55

+1

不,您不需要在輸出t.literal類型的對象時添加'structure:'(請參閱http://sluggo.scrapping.cc/python/WebHelpers/modules/html/builder.html) – born 2013-02-24 12:59:37

+0

OP在這裏要求在* chameleon *中使用的東西。 – 2013-02-24 13:17:04