2009-01-22 83 views
1

我有一個CMS需要一些動態內容並使用標準模板呈現它。不過,我現在在動態內容中使用模板標籤,因此我必須先執行render_to_string,然後將結果作爲上下文變量傳遞給render_to_response。這看起來很浪費。模板內的模板。如何避免渲染兩次?

什麼是更好的方法來做到這一點?

+0

那麼,不要把模板標籤放在動態內容 – nosklo 2009-01-22 13:35:50

回答

2

「這看起來很浪費」爲什麼看起來這樣?

每個模板都是標籤和文本的混合。在你的情況下,一些文本塊已經被模板引擎訪問過。所以呢?一旦它被轉換,它就是文本,並且非常非常快地通過下一個模板引擎。

您是否有特定的性能問題?你不符合你的交易吞吐量要求嗎?有沒有特定的問題?

代碼是否太複雜?難以維護嗎?它總是打破嗎?

我認爲你的解決方案已經足夠。從調試的角度來看,我不確定動態內容中的模板標籤是否合適,但從基本的「模板呈現」角度來看,它沒有問題。

+0

好點。也許這是一個'過早優化'的例子... – 2009-01-22 11:31:24

0

你在做什麼聽起來不錯,但問題可以問:爲什麼不把模板標籤直接放在你的模板中而不是手動渲染它們?

<div> 
    {% if object matches some criteria %} 
     {% render_type1_object object %} 
    {% else %} 
     {% render_type2_object object %} 
    {% endif % 
    ... etc ... 
</div> 

或者,更好的是,具有用於渲染的對象(或多個對象的列表),它封裝了對象類型的到templatetags映射一箇中央templatetag。然後,所有的模板只需引用一個模板標籤,而模板本身不需要任何類型知識。

關鍵在於您正在移動有關如何將單個對象呈現在視圖外的知識。