在工程中建立模板目錄templates。html
在settings.py配置文件中修改TEMPLATES配置項的DIRS值:python
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', ], }, }, ]
在templates目錄中新建一個模板文件,如index.htmldjango
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>{{ city }}</h1> </body> </html>
調用模板分爲三步驟:安全
例如,定義一個視圖函數
from django.http import HttpResponse from django.template import loader, RequestContext def index(request): # 1.獲取模板 template=loader.get_template('booktest/index.html') # 2.定義上下文 context=RequestContext(request,{'city': '北京'}) # 3.渲染模板 return HttpResponse(template.render(context))
Django提供了一個函數render能夠簡寫上述代碼。oop
render(request對象, 模板文件路徑, 模板數據字典)spa
from django.shortcuts import render def index(request): context={'city': '北京'} return render(request,'index.html',context)
變量名必須由字母、數字、下劃線(不能如下劃線開頭)和點組成。debug
語法以下:code
{{變量}}
模板變量能夠使python的內建類型,也能夠是對象。htm
def index(request): context = { 'city': '北京', 'adict': { 'name': '西遊記', 'author': '吳承恩' }, 'alist': [1, 2, 3, 4, 5] } return render(request, 'index.html', context)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>{{ city }}</h1> <h1>{{ adict }}</h1> <h1>{{ adict.name }}</h1> 注意字典的取值方法 <h1>{{ alist }}</h1> <h1>{{ alist.0 }}</h1> 注意列表的取值方法 </body> </html>
1)for循環:
{% for item in 列表 %} 循環邏輯 {{forloop.counter}}表示當前是第幾回循環,從1開始 {%empty%} 列表爲空或不存在時執行此邏輯 {% endfor %}
2)if條件:
{% if ... %} 邏輯1 {% elif ... %} 邏輯2 {% else %} 邏輯3 {% endif %}
比較運算符以下:
== != < > <= >=
布爾運算符以下:
and or not
注意:運算符左右兩側不能緊挨變量或常量,必須有空格。
{% if a == 1 %} # 正確 {% if a==1 %} # 錯誤
語法以下:
若是過濾器須要參數,則使用冒號:傳遞參數。
變量|過濾器:參數
列舉幾個以下:
default,默認值,若是變量不存在時則返回默認值。
data|default:'默認值'
date,日期,用於對日期類型的值進行字符串格式化,經常使用的格式化字符以下:
value|date:"Y年m月j日 H時i分s秒"
1)單行註釋語法以下:
{#...#}
2)多行註釋使用comment標籤,語法以下:
{% comment %} ... {% endcomment %}
模板繼承和類的繼承含義是同樣的,主要是爲了提升代碼重用,減輕開發人員的工做量。
父模板
若是發如今多個模板中某些內容相同,那就應該把這段內容定義到父模板中。
標籤block:用於在父模板中預留區域,留給子模板填充差別性的內容,名字不能相同。 爲了更好的可讀性,建議給endblock標籤寫上名字,這個名字與對應的block名字相同。父模板中也能夠使用上下文中傳遞過來的數據。
{% block 名稱 %} 預留區域,能夠編寫默認內容,也能夠沒有默認內容 {% endblock 名稱 %}
子模板
標籤extends:繼承,寫在子模板文件的第一行。
{% extends "父模板路徑"%}
子模版不用填充父模版中的全部預留區域,若是子模版沒有填充,則使用父模版定義的默認值。
填充父模板中指定名稱的預留區域。
{% block 名稱 %} 實際填充內容 {{ block.super }}用於獲取父模板中block的內容 {% endblock 名稱 %}