# 模板
## 模板介紹
* 作為web框架,Django提供了模板,可以很便利的動態生成HTML
* 模板系統致力于表達外觀,而不是程序邏輯
* 模板的設計實現了業務邏輯\(view\)與顯示內容\(template\)的分離,一個視圖可以使用任意一個模板
* 模板包含
* HTML的靜態部分
* 動態插入內容部分
* django模板語言,簡寫DTL,定義在django.template包中
* 由startproject命令生成的settings.py定義關于模板的值:
* DIRS定義了目錄列表,模板引擎按列表順序搜索這些目錄一查找木本源文件
* APP\_DIRS告訴模板引擎是否應該在每個已安裝的應用中查找模板
* 常用方式:在項目的根目錄下創建templates目錄,設置DIRS值
```text
'DIRS': [os.path.join(BASE_DIR,'templates')],
```
## 模板處理
* Django處理模板分為兩個階段
* 加載:根據給定的標識找到模板然后預處理李,通常會將它編譯好放在內存中
```text
loader.get_template(template_name),返回一個Template對象
```
* 渲染:使用Context數據對模板插值并返回生成的字符串
```text
Template對象的render(RequestContext)方法,使用context渲染模板
```
* 加載渲染完整代碼:
```text
from django.template import loader, RequestContext
from django.http import HttpResponse
def index(request):
tem = loader.get_template('temtest/index.html')
context = {}
return HttpResponse(tem.render(context,request))
```
## 快捷函數
* 為了減少加載模板,渲染模板的重復代碼,django提供了快捷函數
* render\__to\_string\(""\)_
* render\(request,'模板',context\)
```text
from django.shortcuts import render
from django.shortcuts import *
# Create your views here.
def index(request):
context = {'hello':'hello world'}
return render(request,'myapp/index.html',context)
```