做爲一個Web框架,Django須要一個方便的方式來生成動態的HTML。最多見的方法依賴於模板。模板包含所需的HTML輸出的靜態部分以及一些特殊的語法描述如何插入動態內容。html
Django框架後端默認支持自生內置的一套模板系統DTL(Django Template Language) 和 有名的Jinja2模板系統。固然,也能夠從第三方模塊中以前其餘模板系統。若是沒有特殊要求,建議使用Django自帶的DTL模板系統,這也是django 1.8以前惟一能夠的內置選項。python
settings.py:django
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
BACKEND:模板引擎類的python路徑,內置的模板引擎分別有'
後端django.template.backends.django.DjangoTemplates'和'
django.template.backends.jinja2.Jinja2
'
DIRS:模板引擎搜索模板的路徑,如上,默認搜索project目錄下的templates目錄
微信
APP_DIRS:告訴模板引擎是否搜索app目錄下的templates目錄。默認爲true,便是默認搜索app目錄下的templates目錄app
根據前面章節的實例,可見咱們使用了默認的TEMPLATE設置,html頁面直接存放在app目錄下的template目錄下,如 polls/templates/polls/index.html.框架
在view.index 中直接使用測試
return render(request, 'polls/index.html', context)
便可渲染到polls/index.html 頁面。spa
若是設置爲 'APP_DIRS': False,則會搜索模板失敗,如:debug
根據錯誤信息,可見模板引擎搜索模板的路徑在project下的templates中。若是將index.html 移動到mysite\templates\polls\index.html 中便可訪問。
若以上 'APP_DIRS': True,且同時存在
mysite\templates\polls\index.html
mysite\polls\templates\polls\index.html
則會訪問 mysite\templates\polls\index.html 而不是 mysite\polls\templates\polls\index.html
Django項目能夠配置一個或多個模板引擎(甚至是零,若是你不使用模板)。
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ '/home/html/example.com', '/home/html/default', ], }, { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'DIRS': [ '/home/html/jinja2', ], }, ]
If you call get_template('story_detail.html')
, here are the files Django will look for, in order:
/home/html/example.com/story_detail.html
('django'
engine)/home/html/default/story_detail.html
('django'
engine)/home/html/jinja2/story_detail.html
('jinja2'
engine)If you call select_template(['story_253_detail.html', 'story_detail.html'])
, here’s what Django will look for:
/home/html/example.com/story_253_detail.html
('django'
engine)/home/html/default/story_253_detail.html
('django'
engine)/home/html/jinja2/story_253_detail.html
('jinja2'
engine)/home/html/example.com/story_detail.html
('django'
engine)/home/html/default/story_detail.html
('django'
engine)/home/html/jinja2/story_detail.html
('jinja2'
engine)When Django finds a template that exists, it stops looking.