在Django框架中,模板是可以幫助開(kāi)發(fā)者快速生成呈現(xiàn)給用戶(hù)頁(yè)面的工具。用于編寫(xiě)html代碼,還可以嵌入模板代碼轉(zhuǎn)換更方便的完成頁(yè)面開(kāi)發(fā),再通過(guò)在視圖中渲染模板,將生成模板的設(shè)計(jì)實(shí)現(xiàn)了業(yè)務(wù)邏輯視圖與顯示內(nèi)容模板的分離,一個(gè)視圖可以使用任意一個(gè)模板,一個(gè)模板可以供多個(gè)視圖使用。
注意:當(dāng)前顯示的頁(yè)面=模板+數(shù)據(jù)
模板分為兩部分:
一般是在視圖函數(shù)當(dāng)中通過(guò)模板語(yǔ)言去動(dòng)態(tài)產(chǎn)生html頁(yè),然后將頁(yè)面上的內(nèi)容返回給客戶(hù)端,進(jìn)行顯示。
模板文件渲染產(chǎn)生的html頁(yè)面內(nèi)容渲染,使用傳遞的數(shù)據(jù)替換相應(yīng)的變量,產(chǎn)生一個(gè)替換后的表中html內(nèi)容
from django.shortcuts import render
from django.template import loader,RequestContext
from django.http import HttpResponse
# Create your views here.
def my_render(request,template_path,context={}):
# 1.加載模板文件,獲取一個(gè)模板對(duì)象
temp = loader.get_template(template_path)
# 2.定義模板上下文,給模板傳遞數(shù)據(jù)
context = RequestContext(request, context)
# 3.模板渲染,產(chǎn)生一個(gè)替換后的html內(nèi)容
res_html = temp.render(context)
# 4.返回應(yīng)答
return HttpResponse(res_html)
# /index
def index(request):
# return my_render(request,'booktest/index.html') 這是自己封裝的render
# 其實(shí)Django已經(jīng)封裝好了,可以直接使用
return render(request,'booktest/index.html')
模板語(yǔ)言
>模板變量名是由數(shù)字,字母,下劃線和點(diǎn)組成
>注意:不能以下劃線開(kāi)頭
3.模板標(biāo)簽
{% 代碼段 %}
#for循環(huán):
#遍歷列表:
{% for i in 列表 %}
#列表不為空時(shí)執(zhí)行
{% empty %}
#列表為空時(shí)執(zhí)行
{% endfor %}
#若加上關(guān)鍵字reversed則倒序遍歷:
{% for x in 列表 reversed %}
{% endfor %}
#在for循環(huán)中可以通過(guò){{ forloop.counter }}得到for循環(huán)遍歷到幾次
#判斷語(yǔ)句:
{% if %}
{% elif %}
{% else %}
{% endif %}
4.關(guān)系比較操作符
> <> = <= ==!=
注意:在使用關(guān)系比較操作符的時(shí)候,比較符兩邊必須有空格
5.邏輯運(yùn)算
不和
過(guò)濾器
>add:將值的值增加2。使用形式為:{{value | add:“ 2”}}
> cut:從給定值中刪除所有arg的值。使用形式為:{{value | cut:arg}}
>date:格式化時(shí)間格式。使用形式為:{{value| date:“ Ymd H:M:S”}}
>default:如果value是False,那么輸出給定的默認(rèn)值。使用形式:{{value | default:“ nothing”}}。例如,如果值是“”,那么輸出將是nothing
> first:返回列表/字符串中的第一個(gè)元素。使用形式:{{value | first}}
> length:返回值的長(zhǎng)度。使用形式:{{value | length}}
自定義過(guò)濾器的步驟:
from django import template#導(dǎo)入模塊
register = template.Library() #標(biāo)準(zhǔn)語(yǔ)句都不能改
#寫(xiě)函數(shù)裝飾器
@register.filter
def add_xx(value, arg): # 最多有兩個(gè)
return '{}-{}'.format(value, arg)#返回兩個(gè)值的拼接
#在html使用方式
{% load my_tags %}#引用模塊
{{ 'alex'|add_xx:'dsb' }}#通過(guò)函數(shù)名使用
@register.filter(name = xxx)#可以直接通過(guò)name等于的xxx取引用
def add_xx(value, arg): # 最多有兩個(gè)
return '{}-{}'.format(value, arg)#返回兩個(gè)值的拼接
#在html使用方式
{% load my_tags %}#引用模塊
{{'alex'|xxx:'dsb'}}#通過(guò)賦值的name引用
模板里編寫(xiě){%block <demo>%}開(kāi)頭,{%endblock%}結(jié)尾處,代表可以被繼承
例如如下新建的demo.html:
1.父模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
h1{
color: blue;
}
</style>
</head>
<body>
{% block demo %}
<h1>模板1</h1>
{% endblock %}
{% block demo1 %}
<h1>模板2</h1>
{% endblock %}
{% block demo2 %}
<h1>模板3</h1>
{% endblock %}
{% block demo3 %}
<h1 style="color: red">模板4</h1>
{% endblock %}
{% block demo4 %}
<h1>模板5</h1>
{% endblock %}
</body>
</html>
2.子模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% extends 'demo.html' %} #繼承模板
{% block demo %} #對(duì)引入的模板塊進(jìn)行從寫(xiě)
<h1>這里是重寫(xiě)</h1>
{% endblock %}
</body>
</html>
模塊約會(huì)完成,可以看到效果如下所示:
更多建議: