天天看點

Django-模闆繼承

  模闆繼承可以讓您建立一個基本的“骨架”模闆,它包含您站點中的全部元素,并且可以定義能夠被子模闆覆寫的blocks

  base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>blog</title>
    <script src="/static/js/jquery-3.2.1.min.js"></script>
    <script src="/static/bs/js/bootstrap.min.js"></script>   
</head>
<body>
<div class="row" style="background-color:#5ea2d636 "><div class="col-md-1"></div><div class="col-md-10" style="background-color: white" id="text">
    <div class="header" >
    <p class="title"><a id='myfont' href="/blog/{{ username }}">{{ blog.title }}</a></p>
</div>
    <div class="container-fluid">
    <div class="row">
        <div class="col-sm-9">
            {% block content %}

            {% endblock %}
        </div>
    </div>
</div>
    </div><div class="col-md-1"></div>
</div>
</body>
</html>      

   這個base.html模闆,它定義了一個簡單HTML骨架,“子模闆”的工作是用它們的内容填充空的blocks。block告訴模闆引擎字模闆可能會覆寫掉模闆中的這些位置。

  子模闆

{% extends "base.html" %}
{% block content %}

    <div>
        <h1>發表評論</h1>
        <span>評論人</span>
        <span>評論時間</span>
        <span>評論内容</span>
    </div>
    
{% endblock %}      

   extends标簽是這裡的關鍵。它告訴模闆引擎,這個模闆繼承了另一個模闆。當模闆系統處理這個模闆時,首先,它将定位父模闆,在此例中,就是“base.html”。

父模闆的{% block %}标簽中的内容總是被用作備選内容(fallback)

  這種方式使代碼得到最大程度的複用,并且使得添加内容到共享的内容區域更加簡單,例如部分範圍内的導航

  使用模闆繼承時需注意:

  如果你在模闆中使用{%  extends %}标簽,它必須是模闆中的第一個标簽,其他的任何情況下,模闆繼承都無法工作;

  在base模闆中設定越多的{% block %}标簽越好。子模闆不必定義全部父模闆中的blocks,是以,您可以在大多數blocks中填充合理的預設内容。然後,隻定義你需要的那一個,多一點鈎子總比少一點好;

  如果你發現你自己在大量的模闆中複制内容,那可能意味着你應該把内容移動到父模闆中的一個{% block %}中;

  為了更好的可讀性,你也可以給你的{% endblock %}标簽一個名字,在大型模闆中,這個方法可以幫你清楚的看到哪一個{% block %}标簽被關閉了

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

  最後,請注意您并不能在一個模闆中定義多個相同名字的block标簽,這個限制的存在是因為block标簽的作用是雙向的,這個意思是:block标簽不僅提供了一個坑去填,它還在父模闆中定義了填坑的内容。如果在一個模闆中有兩個名字一樣的block标簽,模闆的父模闆将不知道使用哪個block的内容