1.經常使用的模板標籤
-做用是什麼?提供各類邏輯
-模板標籤格式 大括號 百分號 語句 百分號 大括號,還要有結尾也是大括號 百分號 end語句 百分號 大括號
好比 {% for item in items %}
item.元素1
item.元素2
item.元素3
.......
{% endfor %}
其中items能夠是視圖函數傳過來的參數裏的模板變量,模板標籤裏能夠經過循環取得它裏邊的元素,依次把這些元素進行渲染,去執行模板標籤和模板結尾標籤之間定義的操做,循環直到取完items裏邊的元素爲止css
{% for stu in students %} <tr {% if stu.sex == "女" %} style="color: red"{% endif %}> <td><a href="{% url 'teacher:detail' stu.id %}">{{forloop.counter}}</a></td> <td>{{stu.name}}</td> <td>{{stu.age}}</td> <td>{{stu.sex}}</td> </tr> {% endfor %}
-經常使用標籤 for、 if、
(1)其中if語句的關係運算符==,<,>,<=,>= 運算符先後必須有空格,能夠
{% if a== 'aaa' %} 此狀況下執行某某語句
{% elif a>'aaa' %} 此狀況下執行某某語句
{% else %}
{% endif %}
(2)url標籤是單標籤不用有endurl {% url 空格'app:視圖函數'空格 須要傳的參數1 空格 參數2 %},url模板標籤也能夠動態解析url,
注意:'app:視圖函數'先後不要加'/',須要提早在urls.py中爲app命名,以及給相應視圖函數的path起名name='某某某名字'
(3)with {% with s2 = students.2%}
{% endwith %}
(4)循環的模板標籤裏想取得序號,可使用{{forloop.counter}},forloop能夠獲取當前for循環的迭代次數,.counter是下標以1開始,.counter0是下標從0開始
想讓循環迭代次數從大到小排是.revcounter,以1結束,.revcounter0是以0結束
總結:本質仍是字符串格式化,語法 :
{% tag %} {% endtag %}
{% tag 參數 參數 %}
注意在模板標籤的{}裏用到的模板變量不用再加雙層花括號了,變量名就能用,在模板標籤和模板結尾標籤之間的語句裏模板變量要用雙層花括號
2.模板的繼承與引用 (include 和extends也是模板標籤)
-引用 include標籤 {% include 路徑 %}能夠把別的模板渲染完後的內容放到其餘模板裏你想放的位置,include標籤是單獨的標籤,沒有結尾標籤,能夠用於插入廣告模板頁面等,他的參數就是其餘想引用的模板頁面的路徑
-繼承 extends標籤 解決前端代碼冗餘
(1)步驟:1)新建base模板,把全部模板最基本的共同內容寫到base裏,把其餘模板須要更改的部分都去掉
2)在須要繼承base模板的咱們定義的模板,最上面寫extends標籤{% extends 'app名/base.html' %},extends標籤必須在模板文本最上面,注意標籤裏百分號後,extends後,路徑後 都要有空格
繼承的父模板外用引號括起來
3) 某個模板文本最上寫上extends標籤後,就表明它繼承base父模板,它本身自己的內容就都不起做用了,只會顯示繼承自父模板的內容,去返回父模板所渲染的東西html
<title>{% block title %}base模板{% endblock %}</title> {% block link %} 這裏引入你本身想用的css文件吧... {% endblock %} {% block c1 %} <p>abcdefgh....</p> {% endblock %}
上面這些是父模板中的代碼前端
{% extends 'teacher/base.html' %} {% block link %} {% load static %} <link href="{% static 'teacher/css/login_1.css'%}" rel="stylesheet"> {% endblock %} {% block title %}loginteacher{% endblock %} {% block c1 %} <div class="container"> <form class="form-signin"> <h2 class="form-signin-heading">Please sign in</h2> <label for="inputEmail" class="sr-only">Email address</label> <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus> <label for="inputPassword" class="sr-only">Password</label> <input type="password" id="inputPassword" class="form-control" placeholder="Password" required> <div class="checkbox"> <label> <input type="checkbox" value="remember-me"> Remember me </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> </form> </div> <!-- /container --> {% endblock %}
這是自定義的模板中的代碼python
(2) block標籤 :base模板比如字符串中佔位符,預留出來給繼承它的模板顯示本身的內容
注意,block標籤是寫父模板文本base.html中的時候,是留坑留給繼承它的模板頁面的,
block標籤寫在自定義的有個性內容的模板文本中的時候,能夠填坑去定義本模板自定義的個性內容
本質仍是字符串格式化,佔位坑想挖幾個挖幾個,想挖哪裏挖哪裏
語法 1)父模板中,想留空的位置{% block 隨便起個名字 %} 。。。。{% endblok %} block標籤也是閉合標籤,要有結束標籤,起的名字不要加引號擴起來
父模板中能夠插入多個不一樣命名的block標籤和它本身的結尾block標籤
block標籤還能寫到html頁面標籤當中,好比<title>{% block title %}base模板{% endblock %}</title>
2)繼承父模板的自定義模板中,想自定義東西的位置寫成對的block標籤和結尾block標籤名字要和副模版中對應的block標籤名字相同,好比頭部block標籤裏定義css樣式,body裏定義自定義顯示的內容
{% block 和父模板中對應的block標籤同樣的名字 %}
任何自定義內容
{% endblock %}
若是副模版的block標籤寫在html標籤中,自定義模板文本對應名字的block標籤直接寫html標籤裏的內容就能夠了,外面的html標籤都繼承過來了
多個自定義模板能夠繼承同一個父模板,能夠像python裏的類同樣屢次繼承,咱們能夠繼承一個父模板,它繼承了別的父模板
3)技巧:父模板和自定義模板儘量多挖坑,
常見的挖的坑都有:(1)定義一個頁面底部的block標籤{% block domready %}{% endblock %}用來留給自定義模板放js代碼的地方
(2)頁面上部定義的放css的坑
(3)頁面上部定義的放script代碼的坑
app