
## 模板介紹
在之前的章節中,視圖函數只是直接返回文本,而在實際生產環境中其實很少這樣用,因為實際的頁面大多是帶有樣式的HTML代碼,這可以讓瀏覽器渲染出非常漂亮的頁面。DTL是Django Template Language三個單詞的縮寫,也就是Django自帶的模板語言。當然也可以配置Django支持Jinja2等其他模板引擎,但是作為Django內置的模板語言,和Django可以達到無縫銜接而不會產生一些不兼容的情況。
### DTL與普通的HTML文件的區別
DTL模板是一種帶有特殊語法的HTML文件,這個HTML文件可以被Django編譯,可以傳遞參數進去,實現數據動態化。在編譯完成后,生成一個普通的HTML文件,然后發送給客戶端。
### 渲染模板
渲染模板有多種方式。這里講下兩種常用的方式。
1.render_to_string:找到模板,然后將模板編譯后渲染成Python的字符串格式。
最后再通過HttpResponse類包裝成一個HttpResponse對象返回回去。
```
from django.template.loader import render_to_string
from django.http import HttpResponse
def book_detail(request,book_id):
html = render_to_string("index.html")
return HttpResponse(html)
錯誤信息:django.template.exceptions.TemplateDoesNotExist: index.html
解決辦法:需要在settings.py里面設置:'DIRS': [os.path.join(BASE_DIR, 'templates')],
```
2.以上方式雖然已經很方便了。但是django還提供了一個更加簡便的方式,直
接將模板渲染成字符串和包裝成HttpResponse對象一步到位完成。
```
from django.shortcuts import render
def book_list(request):
return render(request,'index.html')
```
### 模板查找路徑配置
在項目的settings.py文件中。有一個TEMPLATES配置,這個配置包含了模板引擎的配置,模板查找路徑的配置,模板上下文的配置等。模板路徑可以在兩個地方配置。
1.DIRS:這是一個列表,在這個列表中可以存放所有的模板路徑,以后在視圖中使用render或者render_to_string渲染模板的時候,會在這個列表的路徑中查找模板。
2.APP_DIRS:默認為True,這個設置為True后,會在INSTALLED_APPS的安裝了的APP下的templates文件加中查找模板。settings.py中INSTALLED_APPS數組中添加你的app名字。
3.查找順序:比如代碼render('list.html')。先會在DIRS這個列表中依次查找路徑下有沒有這個模板,如果有,就返回。如果DIRS列表中所有的路徑都沒有找到,那么會先檢查當前這個視圖所處的app是否已經安裝,如果已經安裝了,那么就先在當前這個app下的templates文件夾中查找模板,如果沒有找到,那么會在其他已經安裝了的app中查找。如果所有路徑下都沒有找到,那么會拋出一個TemplateDoesNotExist的異常。
- 空白目錄
- 1-Django前導知識
- 1-1-虛擬環境
- 1-2-Django框架介紹與環境搭建
- 2-URL與視圖
- 2-1-URL與視圖
- 3-模板
- 3-1-模板介紹
- 3-2-模板變量
- 3-3-常用標簽
- 3-4-模板常用過濾器
- 3-5-模板結構優化
- 3-6-加載靜態文件
- 4-數據庫
- 4-1-操作數據庫
- 4-2-圖書管理系統
- 4-3-ORM模型介紹
- 4-4-ORM模型的增刪改查
- 4-5-模型常用屬性
- 4-6-外鍵和表
- 4-7-查詢操作
- 4-8-QuerySet的方法
- 4-9-ORM模型練習
- 4-10-ORM模型遷移
- 5-視圖高級
- 1-Django限制請求method
- 2-頁面重定向
- 3-HttpRequest對象
- 4-HttpResponse對象
- 5-類視圖
- 6-錯誤處理
- 6-表單
- 1-用表單驗證數據
- 2-ModelForm
- 3-文件上傳
- 7-session和cookie
- 1-session和cookie
- 8-memcached
- 1-memcached
- 9-阿里云部署
- 阿里云部署