我使用的是真子模板塔和我想避免打字這一切的時候:馬克字符串作爲安全的馬可
${ h.some_function_that_outputs_html() | n }
我想以某種方式標記功能,或變量是安全的(你可以在Django中做到這一點),所以我不需要一直使用pipe-en。有任何想法嗎?
我使用的是真子模板塔和我想避免打字這一切的時候:馬克字符串作爲安全的馬可
${ h.some_function_that_outputs_html() | n }
我想以某種方式標記功能,或變量是安全的(你可以在Django中做到這一點),所以我不需要一直使用pipe-en。有任何想法嗎?
我剛剛發現,如果你把html方法你的班級,然後Mako會調用該方法並輸出它在模板中返回的任何內容。
所以我做:
def __html__(self):
return unicode(self)
這h.literal確實基本上是什麼。
按照mako docs about filtering,您可以設置都爲TemplateLookup
創建新Template
時,以及(在這種情況下,這將在默認情況下適用於所有的,它看起來了模板)模板內應用的默認篩選器,與default_filters
的論點。
塔使用此參數與TemplateLookup
設置爲你的項目的默認值config/environment.py
文件中:
# Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup(
directories=paths['templates'],
error_handler=handle_mako_error,
module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
input_encoding='utf-8', default_filters=['escape'],
imports=['from webhelpers.html import escape'])
這就是爲什麼你會得到默認逃逸(這是不是這樣的,當你使用了Mako自己)。因此,您可以在配置文件中全局更改它,或者不依賴標準查找。當心你當然應該明確地使用過濾器來逃避那些需要逃避的東西。
你也能傳遞一個字符串「標記爲安全」與塔幫手h.literal
,例如,如果你會通過h.literal('This will <b>not</b> be escaped')
的模板,也就是說,作爲一個名爲spam
變量,你可以只使用${spam}
不進行轉義處理。
如果您希望在模板內部調用某個函數時具有相同的效果,則此函數需要返回此類文字,或者爲該函數提供一個幫助程序,該函數在結果上調用h.literal
,如果要離開獨創的功能。 (或者我想你也可以通過「Filtering def」來調用它(參見上面相同的Mako doc),但還沒有試驗過)
謝謝,這爲我工作 – disc0dancer
只是一個使用第一個解決方案的人(從default_filters中刪除轉義)的通知 - 你必須清除緩存(rm -r data/templates/*)才能看到它工作(我剛剛花了一些想知道什麼是錯的)。 – zefciu
這必須進入由'h.some_function_that_outputs_html()'返回的「類」我假設。 – Felix