# 第一節:模板介紹
# 模板
在之前的章節中,視圖函數只是直接返回文本,而在實際生產環境中其實很少這樣用,因為實際的頁面大多是帶有樣式的HTML代碼,這可以讓瀏覽器渲染出非常漂亮的頁面。目前市面上有非常多的模板系統,其中最知名最好用的就是DTL和Jinja2。`DTL`是`Django Template Language`三個單詞的縮寫,也就是Django自帶的模板語言。當然也可以配置Django支持Jinja2等其他模板引擎,但是作為Django內置的模板語言,和Django可以達到無縫銜接而不會產生一些不兼容的情況。因此建議大家學習好DTL。
## DTL與普通的HTML文件的區別:
DTL模板是一種帶有特殊語法的HTML文件,這個HTML文件可以被Django編譯,可以傳遞參數進去,實現數據動態化。在編譯完成后,生成一個普通的HTML文件,然后發送給客戶端。
## 渲染模板:
渲染模板有多種方式。這里講下兩種常用的方式。
1. `render_to_string`:找到模板,然后將模板編譯后渲染成Python的字符串格式。最后再通過`HttpResponse`類包裝成一個`HttpResponse`對象返回回去。示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.template.loader <span class="hljs-keyword">import</span> render_to_string
<span class="hljs-keyword">from</span> django.http <span class="hljs-keyword">import</span> HttpResponse
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">book_detail</span><span class="hljs-params">(request,book_id)</span>:</span>
html = render_to_string(<span class="hljs-string">"detail.html"</span>)
<span class="hljs-keyword">return</span> HttpResponse(html)
```
```
2. 以上方式雖然已經很方便了。但是django還提供了一個更加簡便的方式,直接將模板渲染成字符串和包裝成`HttpResponse`對象一步到位完成。示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.shortcuts <span class="hljs-keyword">import</span> render
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">book_list</span><span class="hljs-params">(request)</span>:</span>
<span class="hljs-keyword">return</span> render(request,<span class="hljs-string">'list.html'</span>)
```
```
## 模板查找路徑配置:
在項目的`settings.py`文件中。有一個`TEMPLATES`配置,這個配置包含了模板引擎的配置,模板查找路徑的配置,模板上下文的配置等。模板路徑可以在兩個地方配置。
1. `DIRS`:這是一個列表,在這個列表中可以存放所有的模板路徑,以后在視圖中使用`render`或者`render_to_string`渲染模板的時候,會在這個列表的路徑中查找模板。
2. `APP_DIRS`:默認為`True`,這個設置為`True`后,會在`INSTALLED_APPS`的安裝了的`APP`下的`templates`文件加中查找模板。
3. 查找順序:比如代碼`render('list.html')`。先會在`DIRS`這個列表中依次查找路徑下有沒有這個模板,如果有,就返回。如果`DIRS`列表中所有的路徑都沒有找到,那么會先檢查當前這個視圖所處的`app`是否已經安裝,如果已經安裝了,那么就先在當前這個`app`下的`templates`文件夾中查找模板,如果沒有找到,那么會在其他已經安裝了的`app`中查找。如果所有路徑下都沒有找到,那么會拋出一個`TemplateDoesNotExist`的異常。
- Introduction
- 第一章:學前準備
- 第一節:虛擬環境
- 第二節:準備工作
- 第三節:Django介紹
- 第四節:URL組成部分
- 第二章:URL與視圖
- 第一節:第一個Django項目
- 第二節:視圖與URL分發器
- 第三章:模板
- 第一節:模板介紹
- 第二節:模板變量
- 第三節:常用標簽
- 第四節:常用過濾器
- 第五節:自定義過濾器
- 第七節:模版結構優化
- 第八節:加載靜態文件
- 第四章:數據庫
- 第一節:MySQL相關軟件
- 第二節:數據庫操作
- 第三節:ORM模型
- 第四節:模型常用字段
- 第五節:外鍵和表關系
- 第六節:增刪改查操作
- 第七節:查詢操作
- 第八節:QuerySet API
- 第九節:ORM模型遷移
- 第十節:ORM作業
- 第十一節:ORM作業參考答案
- 第十二節:Pycharm連接數據庫
- 第五章:視圖高級
- 第一節:限制請求method
- 第二節:頁面重定向
- 第三節:HttpRequest對象
- 第四節:HttpResponse對象
- 第五節:生成CSV文件
- 第六節:類視圖
- 第七節:錯誤處理
- 第六章:表單
- 第一節:表單概述
- 第二節:用表單驗證數據
- 第三節:ModelForm
- 第四節:文件上傳
- 第七章:cookie和session
- 第八章:上下文處理器和中間件
- 第一節:上下文處理器
- 第二節:中間件
- 第九章:安全
- 第一節:CSRF攻擊
- 第二節:XSS攻擊
- 第三節:點擊劫持攻擊
- 第四節:SQL注入
- 第十章:信號
- 第一節:什么是信號
- 第十一章:驗證和授權
- 第一節:概述
- 第二節:用戶對象
- 第三節:權限和分組
- 第十二章:Admin系統
- 第十三章:Django的緩存
- 第十四章:memcached
- 第十五章:Redis