Django中的templates(你的HTML頁面放哪裡)

昀溪發表於2018-09-12

本文回答Django裡面的HTML檔案應該怎麼放,以及Django是如何查詢模板檔案的。

到目前為止我們沒有使用HTML頁面,在之前的說明中所有內容都是寫死在程式裡的,如果你想改變內容就要修改程式碼。但是顯然這不和邏輯,所以要將頁面和資料分離,程式產生資料,頁面麼就是用來展示資料的,將來你想更換展示的樣式那麼也不需要修改程式,我們這裡說的程式是Python程式碼。

1. 建立你的HTML檔案

我們來弄一個HTML頁面來做主頁,替代之前的hello world頁面,畢竟有點醜,其實主頁中的HTML寫什麼隨便,我就從網上找了一個Bootstrap模板來用。

https://v3.bootcss.com/examples/jumbotron/

1.1 存放你的html檔案

有了主頁檔案那該放哪裡呢?

先放這裡吧

 

1.2 修改的URL配置

在views中新增一個方法,用於處理對於這個頁面的請求。注意這裡return的時候用來render,雖然HttpResponses可以返回HTML頁面,但是當我們需要對模板進行填充的時候它就不行了,render函式的功能是載入模板,填充資料,然後生成HttpResponse物件,然後返回這個物件。

修改URL配置

驗證一下,是不是好看多了

1.3 Django是怎麼找到這個HTML頁面的

要回答這個問題我們還是需要看settings.py配置檔案

BACKEND:就是Django用來渲染模板用的引擎,預設是Django自帶的,我們也可以快取Jinjia的引擎,這個至少目前我們還沒用到。

DIRS:Django會按順序從這裡的目錄裡去找模板檔案,記住是按照順序啊。也就是說如果有2個同名的檔案那麼只會顯示第一個找到的。

其實這個TEMPLATES列表預設是空的,我們看到的這些資訊都是開發工具給我們生成的,其實也就是透過django-admin建立專案時候產生的。

2. 所有的HTML都要放在預設生成的那個預設的templates目錄裡嗎

畢竟每個APP都有自己的模板檔案,都放在這一個目錄裡會不會比較亂?怎麼才能便於管理呢?

2.1 方法一

其實這個很好解決,你可以按照APP名稱在預設的templates目錄裡建立目錄,如下圖:

現在我們就給mystie這個APP建立一個主頁把。HTML程式碼如下:

在mysite的views.py裡面新增處理函式

修改mystie裡面的url配置,增加一個匯入,建立一個URL匹配模式

測試訪問

2.2 方法二

在每一個APP目錄裡面建立一個templates目錄(其實這個目錄名沒有要求),然後我們把建立的主頁檔案挪走,如下圖:

mysite的URL配置檔案不變

這時候你發現mysite裡面的views.py檔案有報錯,找不到了。

我們把前面的目錄都刪除,發現錯誤提示沒有了

顯示正常

這是為什麼呢?它怎麼知道去mystie這個APP的templates目錄裡找呢?其實這個還是跟settings.py檔案有關

APP_DIRS:它的作用就是讓模板引擎去APP的目錄裡面的templates目錄裡找模板檔案,記住只能是templates目錄。該選項預設是False,但是你看到的預設是True,這個也是因為透過django-admin建立專案是幫你設定的。

那如果我的APP裡面的模板目錄不叫templates呢?比如下面,我把目錄名改了,views裡又提示找不到了。怎麼辦呢?

這時候就有用到settings.py檔案了,增加一個目錄就好了。

 

相關文章