Django 模板

2021-10-19 19:28 更新

Django模板  簡介

在Django框架中,模板是可以幫助開發(fā)者快速生成呈現(xiàn)給用戶頁面的工具。用于編寫html代碼,還可以嵌入模板代碼轉換更方便的完成頁面開發(fā),再通過在視圖中渲染模板,將生成模板的設計實現(xiàn)了業(yè)務邏輯視圖與顯示內(nèi)容模板的分離,一個視圖可以使用任意一個模板,一個模板可以供多個視圖使用。

注意:當前顯示的頁面=模板+數(shù)據(jù)

模板分為兩部分: 

  • 靜態(tài)頁面:主要包括了CSS,HTML,JS,圖片
  • 動態(tài)填充:主要是通過模板語言去動態(tài)的產(chǎn)生一些頁面上的內(nèi)容

 模板文件的使用

一般是在視圖函數(shù)當中通過模板語言去動態(tài)產(chǎn)生html頁,然后將頁面上的內(nèi)容返回給客戶端,進行顯示。

  1.  先加載模板文件loader.get_template,獲取模板文件其中的內(nèi)容,產(chǎn)生一個模板對象
  2. 定義模板其他RequestContext,給模板文件傳遞數(shù)據(jù)
  3. 模板文件渲染產(chǎn)生的html頁面內(nèi)容渲染,使用傳遞的數(shù)據(jù)替換相應的變量,產(chǎn)生一個替換后的表中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.加載模板文件,獲取一個模板對象
  temp = loader.get_template(template_path)
  # 2.定義模板上下文,給模板傳遞數(shù)據(jù)
  context = RequestContext(request, context)
  # 3.模板渲染,產(chǎn)生一個替換后的html內(nèi)容
  res_html = temp.render(context)
  # 4.返回應答
  return HttpResponse(res_html)
# /index
def index(request):
  # return my_render(request,'booktest/index.html') 這是自己封裝的render
  # 其實Django已經(jīng)封裝好了,可以直接使用
  return render(request,'booktest/index.html')

模板文件的加載順序

  1. 首先去配置的當前模板的目錄下面去找
  2. 如果配置的目錄下面沒有,就去已經(jīng)創(chuàng)建的應用文件中去查找模板文件(這種方式,僅限于應用下面必須有模板文件夾)

模板語言

  1. 模板語言(Django模板語言)簡稱DTL。
  2. 模板變量

        >模板變量名是由數(shù)字,字母,下劃線和點組成

        >注意:不能以下劃線開頭

   3.模板標簽

{% 代碼段 %}
#for循環(huán):
#遍歷列表:
{% for i in 列表 %}
#列表不為空時執(zhí)行
{% empty %}
#列表為空時執(zhí)行
{% endfor %}
#若加上關鍵字reversed則倒序遍歷:
{% for x in 列表 reversed %} {% endfor %} #在for循環(huán)中可以通過{{ forloop.counter }}得到for循環(huán)遍歷到幾次 #判斷語句: {% if %} {% elif %} {% else %} {% endif %}            

        4.關系比較操作符

        > <> = <= ==!=

        注意:在使用關系比較操作符的時候,比較符兩邊必須有空格

       5.邏輯運算

        不和

過濾器 

  • 過濾器用于對模板變量進行操作
  • 使用:

        >add:將值的值增加2。使用形式為:{{value | add:“ 2”}}

        > cut:從給定值中刪除所有arg的值。使用形式為:{{value | cut:arg}}

        >date:格式化時間格式。使用形式為:{{value| date:“ Ymd H:M:S”}}

        >default:如果value是False,那么輸出給定的默認值。使用形式:{{value | default:“ nothing”}}。例如,如果值是“”,那么輸出將是nothing

        > first:返回列表/字符串中的第一個元素。使用形式:{{value | first}}

        > length:返回值的長度。使用形式:{{value | length}}

 自定義過濾器的步驟:

  • 在自己的應用文件下新建一個稱為模板標簽的python包
  • 在python包中新建一個過濾器的py文件
  • 配置
from django import template#導入模塊
register = template.Library() #標準語句都不能改
#寫函數(shù)裝飾器
@register.filter
def add_xx(value, arg):  # 最多有兩個
    return '{}-{}'.format(value, arg)#返回兩個值的拼接
#在html使用方式
{% load my_tags %}#引用模塊
{{ 'alex'|add_xx:'dsb' }}#通過函數(shù)名使用
@register.filter(name = xxx)#可以直接通過name等于的xxx取引用
def add_xx(value, arg):  # 最多有兩個
    return '{}-{}'.format(value, arg)#返回兩個值的拼接
#在html使用方式
{% load my_tags %}#引用模塊
{{'alex'|xxx:'dsb'}}#通過賦值的name引用

模板注釋       

  • 單行注釋:{#注釋內(nèi)容#}
  • 多行注釋:{%comment%}
  • 注釋內(nèi)容
  • {%最終評論%}
  • 模板注釋的內(nèi)容瀏覽器看不到,html注釋的內(nèi)容瀏覽器可以看到html的注釋:

模板的繼承

模板里編寫{%block <demo>%}開頭,{%endblock%}結尾處,代表可以被繼承

例如如下新建的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 %} #對引入的模板塊進行從寫
    <h1>這里是重寫</h1>
{% endblock %}
</body>
</html>

模塊約會完成,可以看到效果如下所示:



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號