2017-02-11 75 views
0

我特別使用Django和Jinja2。這是我第一次嘗試在沒有CMS的幫助下使用模板來挑選哪些模板並將它們放在一起。DTL和Jinja等模板語言/引擎如何表達和管理各種模板文件之間的關係?

由於某種原因,我似乎無法理解一堆碎片如何配合在一起。

我感覺很舒服與這些概念:

  • 的模板引擎處理模板,併產生有用的結果的模型。
  • 模板文件描述了模型數據應該如何適應它以產生結果。
  • 應用程序開發人員以編程方式與表示模板文件的引擎和模板對象進行交互。程序員負責選擇模板文件,提供數據,並將其全部交給引擎。然後做一些有用的結果引擎回饋。

但是我與掙扎是這樣的:

  • 模板文件可以被寫入相互繼承,促進乾燥。
  • 模板文件包含有關其繼承的信息。

現在我跌倒了。

  1. 這是如何工作的?系統中的這個關係在哪裏使用?
  2. 如果我將基本模板傳遞給引擎,引擎如何知道應使用哪個子模板?
  3. 如果我將一個子模板傳遞給引擎,那麼該模板包含有關它所擴展的模板的信息,但是如果父模板需要多於一個子模板呢?

我知道我有一個錯誤的,大圖片的理解。也許我不明白哪些職責屬於模板,哪些屬於應用程序?

非常感謝!

編輯:

我想我在我的關節問題沒有工作的第一次嘗試。這裏的一個鏡頭:

Some templates

圖1顯示了一些模板,我有(假設)。有一個基本模板,一個標題模板和一個正文,側邊欄和頁腳模板中的兩個。

有一棵繼承樹。每個模板都指定(如果可能的話,我的理解)它擴展的模板。

這裏存在這個問題。只考慮正文和頁腳模板。他們擴大基地。但在我的理解中,我只能選擇其中的一種進行渲染。如果我選擇其中一個身體,那麼我無法選擇我想要的腳註。如果我選擇其中一個頁腳,那麼我不能選擇我想要的那個身體。如果我希望能夠選擇正文和頁腳,按照我的理解,我必須編寫四個模板,每個模板一個。當然,這不可能是如何運作的?

然後我們有側邊欄。假設我繼續並製作這四個模板。那麼,我的側邊欄應該延伸到哪四個?如果我希望能夠爲所有四種佈局選擇側邊欄,那麼現在我必須創建八個模板!圖2顯示了不同的組合。

在一個實際的項目中(不僅僅是像我正在工作的個人項目),我希望不僅僅處理這些事情。除了已經描述的不同佈局之外,我需要在側邊欄中使用不同的塊,根據用戶是否登錄以及各種不同的佈局來設置不同的佈局。我很容易想象需要編寫數百個模板來涵蓋所有可能性。

如果這真的是模板系統的工作原理,那麼我應該使用什麼呢?

回答

0

但這些不支持工作流程。唯一有意義的情況是擴展父項的子項,並將子項發送到模板引擎。

任何模板也可以直接包含其他模板,但這不是繼承鏈的一部分。

+0

嗯,一個鏈。所以我明確地不能使用模板樹來構建頁面?我一直假設我應該能夠在模板中指定樹結構。 所以如果我想要那個樹結構,我應該建立到我的應用程序的視圖邏輯? – MadEmperorYuri