目錄
一、模板使用步驟
1.創建模板
2.配置(設置模板查找路徑)
3.模板接收視圖傳入的數據
4.模板處理數據
5. 查看模板處理數據成果
二、Django使用自帶模板
1.配置
2.定義模板
3.模板渲染
4.模板語法
4.1 模板變量
4.2 模板語句
4.3 注釋
5.過濾器
6.模板繼承
應用
同級目錄下創建模板文件夾templates. 文件夾名稱固定寫法.應用
同名文件夾. 例, Book在應用
同名文件夾下創建網頁模板
文件. 例 :index.html
在工程中創建模板目錄templates。
在settings.py配置文件中修改TEMPLATES配置項的DIRS值:
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',
],
},
},
]
如圖:
在應用的views.py中傳入數據:
from django.shortcuts import render
# Create your views here.
def index(request):
context = {'title': '模板數據處理'}
return render(request,'book/index.html',context)
在views.py中定義了context文本,將數據傳入模板中,模板通過title鍵,讀取字典的值
在工程中創建模板目錄templates。
在settings.py配置文件中修改TEMPLATES配置項的DIRS值:
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.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{
{ city }}
</body>
</html>
調用模板分為兩步驟:
找到模板 loader.get_template(模板文件在模板目錄中的相對路徑) -> 返回模板對象
渲染模板 模板對象.render(context=None, request=None) -> 返回渲染後的html文本字符串 context 為模板變量字典,默認值為None request 為請求對象,默認值為None
例如,定義一個視圖
from django.http import HttpResponse
from django.template import loader
def index(request):
# 1.獲取模板
template=loader.get_template('index.html')
context={'city': '北京'}
# 2.渲染模板
return HttpResponse(template.render(context))
Django提供了一個函數render可以簡寫上述代碼。
render(request對象, 模板文件路徑, 模板數據字典)
from django.shortcuts import render
def index(request):
context={'city': '北京'}
return render(request,'index.html',context)
變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成。
語法如下:
{
{變量}}
模板變量可以使python的內建類型,也可以是對象。
def index(request):
context = {
'city': '北京',
'adict': {
'name': '西游記',
'author': '吳承恩'
},
'alist': [1, 2, 3, 4, 5]
}
return render(request, 'index.html', context)
1)for循環:
{% for i in views_list %}
{
{ i }}
{% endfor %}
{% for %} 允許我們在一個序列上迭代。
與 Python 的 for 語句的情形類似,循環語法是 for X in Y ,Y 是要迭代的序列而 X 是在每一個特定的循環中使用的變量名稱。每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的所有內容。
示例:
2)if條件:
{% if condition %}
... display
{% endif %}
或者
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
比較運算符如下:
==
!=
<
>
<=
>=
布爾運算符如下:
and
or
not
注意:運算符左右兩側不能緊挨變量或常量,必須有空格。
1)單行注釋語法如下:
{# 注釋語句 #}
2)多行注釋使用comment標簽,語法如下:
{# comment #}
多行注釋
{# endcomment #}
語法如下:
變量|過濾器:參數
列舉幾個如下:
safe,禁用轉義,告訴模板這個變量是安全的,可以解釋執行
length,長度,返回字符串包含字符的個數,或列表、元組、字典的元素個數。
default,默認值,如果變量不存在時則返回默認值。
data|default:'默認值'
date,日期,用於對日期類型的值進行字符串格式化,常用的格式化字符如下:
value|date:"Y年m月j日 H時i分s秒"
模板繼承和類的繼承含義是一樣的,主要是為了提高代碼重用,減輕開發人員的工作量。
父模板
如果發現在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。
標簽block:用於在父模板中預留區域,留給子模板填充差異性的內容,名字不能相同。 為了更好的可讀性,建議給endblock標簽寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的數據。
子模板
標簽extends:繼承,寫在子模板文件的第一行。
{% block 名稱 %}
預留區域,可以編寫默認內容,也可以沒有默認內容
{% endblock 名稱 %}
子模版不用填充父模版中的所有預留區域,如果子模版沒有填充,則使用父模版定義的默認值。
{% extends "父模板路徑" %}
填充父模板中指定名稱的預留區域。
{% block 名稱 %}
實際填充內容
{
{ block.super }}用於獲取父模版中block的內容
{% endblock 名稱 %}
}