django模版标签和继承
模板標簽
標簽語法: 由%}和 {% 來定義的,例如:{%tag%} {%endtag%}
這個定義是刻意模糊的。 例如,一個標簽可以輸出內容,作為控制結構,例如“if”語句或“for”循環從數據庫中提取內容,甚至可以訪問其他的模板標簽
for…in…筆記:
for...in...標簽:
for...in...類似于Python中的for...in...。可以遍歷列表、元組、字符串、字典等一切可以遍歷的對象。示例代碼如下:
{% for person in persons %} <p>{{ person.name }}</p> {% endfor %}如果想要反向遍歷,那么在遍歷的時候就加上一個reversed。示例代碼如下:
{% for person in persons reversed %} <p>{{ person.name }}</p> {% endfor %}遍歷字典的時候,需要使用items、keys和values等方法。在DTL中,執行一個方法不能使用圓括號的形式。遍歷字典示例代碼如下:
{% for key,value in person.items %} <p>key:{{ key }}</p> <p>value:{{ value }}</p> {% endfor %}在for循環中,DTL提供了一些變量可供使用。這些變量如下:
- forloop.counter:當前循環的下標。以1作為起始值。
- forloop.counter0:當前循環的下標。以0作為起始值。
- forloop.revcounter:當前循環的反向下標值。比如列表有5個元素,那么第一次遍歷這個屬性是等于5,第二次是4,以此類推。并且是以1作為最后一個元素的下標。
- forloop.revcounter0:類似于forloop.revcounter。不同的是最后一個元素的下標是從0開始。
- forloop.first:是否是第一次遍歷。
- forloop.last:是否是最后一次遍歷。
- forloop.parentloop:如果有多個循環嵌套,那么這個屬性代表的是上一級的for循環。
** 模板中的for…in…沒有continue和break語句,這一點和Python中有很大的不同,一定要記清楚! **
for...in...empty標簽:
這個標簽使用跟for...in...是一樣的,只不過是在遍歷的對象如果沒有元素的情況下,會執行empty中的內容。示例代碼如下:
{% for person in persons %} <li>{{ person }}</li> {% empty %} 暫時還沒有任何人 {% endfor %}模版繼承筆記:
在前端頁面開發中。有些代碼是需要重復使用的。這種情況可以使用include標簽來實現。也可以使用另外一個比較強大的方式來實現,那就是模版繼承。模版繼承類似于Python中的類,在父類中可以先定義好一些變量和方法,然后在子類中實現。模版繼承也可以在父模版中先定義好一些子模版需要用到的代碼,然后子模版直接繼承就可以了。并且因為子模版肯定有自己的不同代碼,因此可以在父模版中定義一個block接口,然后子模版再去實現。以下是父模版的代碼:
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="{% static 'style.css' %}" /> <title>{% block title %}我的站點{% endblock %}</title> </head><body> <div id="sidebar"> {% block sidebar %} <ul> <li><a href="/">首頁</a></li> <li><a href="/blog/">博客</a></li> </ul> {% endblock %} </div> <div id="content"> {% block content %}{% endblock %} </div> </body> </html>這個模版,我們取名叫做base.html,定義好一個簡單的html骨架,然后定義好兩個block接口,讓子模版來根據具體需求來實現。子模板然后通過extends標簽來實現,示例代碼如下:
{% extends "base.html" %}{% block title %}博客列表{% endblock %}{% block content %} {% for entry in blog_entries %} <h2>{{ entry.title }}</h2> <p>{{ entry.body }}</p> {% endfor %} {% endblock %}需要注意的是:extends標簽必須放在模版的第開始的位置
子模板中的代碼必須放在block中,否則將不會被渲染。
如果在某個block中需要使用父模版的內容,那么可以使用{{block.super}}來繼承。比如上例,{%block title%},如果想要使用父模版的title,那么可以在子模版的title block中使用{{ block.super }}來實現。
在定義block的時候,除了在block開始的地方定義這個block的名字,還可以在block結束的時候定義名字。比如{% block title %}{% endblock title %}。這在大型模版中顯得尤其有用,能讓你快速的看到block包含在哪里。
案例理解
模板繼承使用extends標簽實現。通過使用block來給子模板開放接口。
1、extends必須是模板中的第一個出現的標簽。
2、子模板中的所有內容,必須出現在父模板定義好的block中,否則django將不會渲染。
3、如果出現重復代碼,就應該考慮使用模板。
4、盡可能多的定義block,方便子模板實現更細的需求。
5、如果在某個block中,要使用父模板的內容,使用block.super獲取。
{{}} 是模板變量
{%%}是模板標簽
總結
以上是生活随笔為你收集整理的django模版标签和继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东坡区有没有一个姓苗苗小学?
- 下一篇: 火灾后消防封条封了可以进去拿东西吗?