2011-10-14 81 views
2

我需要在我的Django應用程序中擴展頁面的基本模板,但是需要從基礎中的這個新頁面中排除一些HTML元素。刪除它們的最佳方法是什麼?我只是用JQuery刪除元素?如何覆蓋Django基本模板

回答

4

您可以使用模板塊來實現此目的。例如,在base.html文件,圍繞在一個名爲塊中的HTML元素:

{% block a_unique_name %}<div>This is only relevant in base.html</div>{% endblock %} 

塊中的HTML只會如果沒有其他模板覆蓋它被使用。您可以覆蓋在你的子模板是這樣的:

{% extend base.html %} 
{% block a_unique_name %}{% endblock %} 

現在將使用從子模板中的值將覆蓋從base.html文件的默認值。

+0

很好的答案,謝謝! – user995469

0

創建沒有這些元素的基本模板。用這些元素創建子模板。從基本模板繼承所有頁面,形成此子模板和此特定頁面。

另一種方法是將這些元素放入基本模板中的塊中。

{# base template #} 
{% block override_me %} 
<elem1 /><elem2 /> 
{% endblock %} 

{# child template #} 
{% block override_me %}{% endblock %} 
+0

這不一定是個壞主意。如果代碼必須在幾個子模板中重新創建,以避免將其放入base.html,則違反了DRY原則。使用塊更好。 –

+0

@George Cummins用JS去除元素不一定是個壞主意? Ooook。並且請顯示DRY違規的地方(請注意,這種方法在[django網站](https://github.com/django/djangoproject.com/tree/master/django_website/templates)中使用)。 – DrTyrsa

+0

顯然,我不清楚您的「不良想法」評論針對的是原始問題的哪一部分。刪除子模板中的元素不是問題,但我同意通過JS刪除元素並不理想。如果你重新回答你的答案的第一段,我可以刪除我的downvote。 –