本文回答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文件了,增加一個目錄就好了。