2013-07-16 48 views
4

我有一個以下模板:{% extends "main/main-template.html" %} 我也想要一個完全相同的模板,而不是它{% extends "main/main-template-quick.html" %}這似乎是違反DRY只是複製並粘貼到一個新的文件相同的代碼,只是這樣我可以更改模板。有什麼方法可以動態選擇超級模板嗎?動態改變Django模板的繼承?

如果不是,是否有一個好方法可以做到以下幾點:將相同的{% block %}及其內容重複使用不同的模板。同時,不違反DRY。

我也對其他可能能夠做到這一點的模板語言開放。

回答

5

如果你check the docs你會看到extends也接受一個變量。

{%extends variable%}使用變量的值。如果變量 的計算結果爲字符串,則Django將使用該字符串作爲 父模板的名稱。

因此,您可以輕鬆地在視圖中確定適當的基本模板並將其傳遞到模板。

如果你想在不同的上下文中重用一塊html,那麼include標籤就是你的朋友。

+0

謝謝。有沒有什麼方法可以根據布爾值來選擇名稱,因爲我相信它必須是文件中的第一件事。 –

+1

我想我完全不明白你的問題,但你可以做的是沿着這些方向:'''template_name ='main.html'if x else'alt.html''''其中x是你的布爾值。 – arie

2

Django允許使用{{ block.super}}顯示父模板塊內容。

這允許您插入父級的塊內容。

{% block content %} 
    {{ block.super }} 
{% endblock content %} 

block.super的設計,讓您

重複使用相同的{%塊%},並與不同的模板內容。