溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django模板繼承和靜態(tài)資源如何使用

發(fā)布時間:2022-03-04 13:59:10 來源:億速云 閱讀:127 作者:iii 欄目:web開發(fā)

這篇“Django模板繼承和靜態(tài)資源如何使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Django模板繼承和靜態(tài)資源如何使用”文章吧。

  1、模板繼承

  對于一個網(wǎng)站來說,會存在很多的html文件,但是由于一些頁面中會有相同的頁面結構出現(xiàn)。也就導致了多個html文件中代碼是重復的,所以為了在html中減少重復的代碼的出現(xiàn),簡化html結構,可以將多個頁面中相同的html代碼,單獨的抽離出來放在一個html文件中,其他的html文件如果想要使用這部分內(nèi)容,直接繼承過去就可以了,有點類似于類的繼承關系。

  繼承關系:父模板和子模板。

  2、假設現(xiàn)在有一個網(wǎng)站,它的首頁、列表頁和詳情頁這些頁面,頁面頂部的導航條和頁面底部的工具條是一樣的,唯一變化的就是其中內(nèi)容。畫了一個簡陋的圖,大致如下圖所示:

  對于這個網(wǎng)站,其頁面結構%70(浮夸風()?""")以上的內(nèi)容都是相似的,如果我們每一個html文件都寫入這些相同部分的代碼,也是可以的,只是會造成代碼的冗余等。為了方便解決這個問題,減少重復代碼的出現(xiàn),模板的繼承就很好的解決了這個問題。

  現(xiàn)在我們來實現(xiàn)模板的繼承。

  1、創(chuàng)建項目和app

  django-admin startproject djangotemplateinherit

  cd djangotemplateinherit

  python manage.py startapp teminherit

  2、在項目根目錄下創(chuàng)建templates文件夾。

  3、在urls.py文件中編寫路由。

  4、編寫業(yè)務邏輯,即視圖函數(shù)。

  5、在templates文件夾下新建3個html文件。

  4、再新建一個nav.html,表示公共的導航條部分。

  同時,我們在views.py文件中更改視圖函數(shù),渲染模板。

  5、我們在nav.html中寫入如下代碼

  6、分別在index.html,list.html,detail.html中引入這個nav.html導航條模板。

  模板的繼承需要使用到extends關鍵字。

  extends:關鍵字表明了當前文件index.html所繼承的父模板

  繼承時會將此文件(當前案例是nav.html文件)的所有代碼全部繼承。

  在index.html文件中寫入如下代碼:

  其他兩個list.html,detail.html文件同index.html,寫入相同的內(nèi)容。

  7、運行查看

  此時,這三個html都使用了公共的導航條(nav.html文件)。

  8、雖然使用了公共的導航條,但是每個html文件中,此時我們不能加入每個頁面的內(nèi)容(即首頁內(nèi)容,列表頁內(nèi)容,詳情頁內(nèi)容),不信,你可以嘗試?此時我們在index.html中寫入一個h3標簽。

  再次刷新網(wǎng)頁,發(fā)現(xiàn)首頁上并沒有我們想要的內(nèi)容。

  原因是我們已經(jīng)將nav.html中內(nèi)容固定了,extends繼承模板時,將nav.html文件的內(nèi)容完全引入,替換掉index.html的內(nèi)容,所以我們自己寫的h3標簽是不可以運行的。值得注意的是,如果把h3標簽放在{% extends ‘nav.html’ %}代碼之前,是可以運行顯示的,這里不做嘗試,望讀者自行嘗試。

  9、現(xiàn)在我們的需求是index,list,detail的模板文件在渲染后展示不同的內(nèi)容。但由于這index,list,detail三個模板文件我們現(xiàn)在繼承的是nav.html的內(nèi)容,直接將代碼{% extends ‘nav.html’ %}添加在后面又不可以,放在{% extends ‘nav.html’ %}之前又失去了公共導航條的意義。那么現(xiàn)在唯一剩下的解決方案就是更改nav.html,使其能夠讓我們在不同的模板文件中實現(xiàn)自定義的功能。

  Django為我們提供了一個block標簽。如果子模板需要在當前這個頁面的基礎上,添加一些自己頁面的內(nèi)容,使用django內(nèi)置的模板標簽block(代碼塊)即可,需要給這個塊起一個名稱??梢噪S意起。

  10、現(xiàn)在我們修改nav.html,預留自定義代碼的接口。即增加{% block content %} {% endblock %}。

  同時在index.html文件中增加一個自定義的h2標簽。

  再次刷新,此時index首頁已經(jīng)發(fā)生變化。多出了我們自定義的h2標簽。相應的其他兩個模板文件的變更與index.html相同,這里不做嘗試。

  11、雖然自定義了index首頁的內(nèi)容。但是細心的同學就會發(fā)現(xiàn)了一個小小的缺陷。

  那就是打開index首頁的選項卡上仍舊顯示的是nav.html中的title字段。我們知道,諸如伯樂在線這個網(wǎng)站,每點擊導航欄的一個模塊,新打開的窗口上的額標題就會發(fā)生變化。而我們現(xiàn)在繼承了模板,相應的title內(nèi)容也就寫死了。那么該怎么處理呢?

  12、為了方便解決這個問題,我們將nav.html的內(nèi)容再次做出修改,如下圖所示:

  注意:

  在block中設置的標簽,就相當于是一個title的默認值。

  如果子模板沒有重寫這個title塊,就使用這個默認值,如果子模板重寫了這個title塊,就使用子模板的值。

  13、由于我們需要變更index首頁的title標題,所以我們需要對index.html的內(nèi)容再次做出修改。通過block預留的接口,修改我們需要的title。這一點類似于類,我們可以對類進行繼承,在繼承的同時對其不符合我們需求的進行重寫。

以上就是關于“Django模板繼承和靜態(tài)資源如何使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關的知識內(nèi)容,請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI