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