您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何優(yōu)化django模板結(jié)構(gòu),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
模版結(jié)構(gòu)優(yōu)化
引入模版
有時(shí)候一些代碼是在許多模版中都用到的。如果我們每次都重復(fù)的去拷貝代碼那肯定不符合項(xiàng)目的規(guī)范。一般我們可以把這些重復(fù)性的代碼抽取出來(lái),就類(lèi)似于Python中的函數(shù)一樣,以后想要使用這些代碼的時(shí)候,就通過(guò) include 包含進(jìn)來(lái)。這個(gè)標(biāo)簽就是 include 。示例代碼如下:
# header.html <p>我是header</p> # footer.html <p>我是footer</p> # main.html {% include 'header.html' %} <p>我是main內(nèi)容</p> {% include 'footer.html' %}
include 標(biāo)簽尋找路徑的方式。也是跟 render 渲染模板的函數(shù)是一樣的。
默認(rèn) include 標(biāo)簽包含模版,會(huì)自動(dòng)的使用主模版中的上下文,也即可以自動(dòng)的使用主模版中的變量。如果想傳入一些其他的參數(shù),那么可以使用 with 語(yǔ)句。示例代碼如下:
# header.html <p>用戶(hù)名:{{ username }}</p> # main.html {% include "header.html" with username='huangyong' %}
模板繼承:
在前端頁(yè)面開(kāi)發(fā)中。有些代碼是需要重復(fù)使用的。這種情況可以使用 include 標(biāo)簽來(lái)實(shí)現(xiàn)。也可以使用另外一個(gè)比較強(qiáng)大的方式來(lái)實(shí)現(xiàn),那就是模版繼承。模版繼承類(lèi)似于 Python 中的類(lèi),在父類(lèi)中可以先定義好一些變量和方法,然后在子類(lèi)中實(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' %}" rel="external nofollow" /> <title>{% block title %}我的站點(diǎn){% endblock %}</title> </head> <body> <div id="sidebar"> {% block sidebar %} <ul> <li><a href="/" rel="external nofollow" >首頁(yè)</a></li> <li><a href="/blog/" rel="external nofollow" >博客</a></li> </ul> {% endblock %} </div> <div id="content"> {% block content %}{% endblock %} </div> </body> </html>
這個(gè)模版,我們?nèi)∶凶?base.html ,定義好一個(gè)簡(jiǎn)單的 html 骨架,然后定義好兩個(gè) block 接口,讓子模版來(lái)根據(jù)具體需求來(lái)實(shí)現(xiàn)。子模板然后通過(guò) extends 標(biāo)簽來(lái)實(shí)現(xiàn),示例代碼如下:
{% extends "base.html" %} {% block title %}博客列表{% endblock %} {% block content %} {% for entry in blog_entries %} <h3>{{ entry.title }}</h3> <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 開(kāi)始的地方定義這個(gè) block 的名字,還可以在 block 結(jié)束的時(shí)候定義名字。比如 {% block title %}{% endblock title %} 。這在大型模版中顯得尤其有用,能讓你快速的看到 block 包含在哪里。
上述內(nèi)容就是如何優(yōu)化django模板結(jié)構(gòu),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。