django 模板使用

1 配置

在工程中建立模板目錄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', ], }, }, ] 

2 定義模板

在templates目錄中新建一個模板文件,如index.htmldjango

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>{{ city }}</h1> </body> </html> 

3 模板渲染

調用模板分爲三步驟:安全

  1. 找到模板
  2. 定義上下文
  3. 渲染模板

例如,定義一個視圖函數

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) 

4 模板語法

4.1 模板變量

變量名必須由字母、數字、下劃線(不能如下劃線開頭)和點組成。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> 

4.2 模板語句

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 %} # 錯誤 

4.3 過濾器

語法以下:

  • 使用管道符號|來應用過濾器,用於進行計算、轉換操做,能夠使用在變量、標籤中。
  • 若是過濾器須要參數,則使用冒號:傳遞參數。

    變量|過濾器:參數

列舉幾個以下:

  • safe,禁用轉義,告訴模板這個變量是安全的,能夠解釋執行
  • length,長度,返回字符串包含字符的個數,或列表、元組、字典的元素個數。
  • default,默認值,若是變量不存在時則返回默認值。

    data|default:'默認值'
  • date,日期,用於對日期類型的值進行字符串格式化,經常使用的格式化字符以下:

    • Y表示年,格式爲4位,y表示兩位的年。
    • m表示月,格式爲01,02,12等。
    • d表示日, 格式爲01,02等。
    • j表示日,格式爲1,2等。
    • H表示時,24進制,h表示12進制的時。
    • i表示分,爲0-59。
    • s表示秒,爲0-59。
    value|date:"Y年m月j日  H時i分s秒"

4.4 註釋

1)單行註釋語法以下:

{#...#}

2)多行註釋使用comment標籤,語法以下:

{% comment %}
...
{% endcomment %}

4.5 模板繼承

模板繼承和類的繼承含義是同樣的,主要是爲了提升代碼重用,減輕開發人員的工做量。

父模板

若是發如今多個模板中某些內容相同,那就應該把這段內容定義到父模板中。

標籤block:用於在父模板中預留區域,留給子模板填充差別性的內容,名字不能相同。 爲了更好的可讀性,建議給endblock標籤寫上名字,這個名字與對應的block名字相同。父模板中也能夠使用上下文中傳遞過來的數據。

{% block 名稱 %}
預留區域,能夠編寫默認內容,也能夠沒有默認內容
{% endblock  名稱 %}

子模板

標籤extends:繼承,寫在子模板文件的第一行。

{% extends "父模板路徑"%}

子模版不用填充父模版中的全部預留區域,若是子模版沒有填充,則使用父模版定義的默認值。

填充父模板中指定名稱的預留區域。

{% block 名稱 %}
實際填充內容
{{ block.super }}用於獲取父模板中block的內容
{% endblock 名稱 %}
相關文章
相關標籤/搜索