日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Django 模板4.1

發布時間:2023/11/28 生活经验 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django 模板4.1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模板介紹

  • 作為Web框架,Django提供了模板,可以很便利的動態生成HTML
  • 模版系統致力于表達外觀,而不是程序邏輯
  • 模板的設計實現了業務邏輯(view)與顯示內容(template)的分離,一個視圖可以使用任意一個模板,一個模板可以供多個視圖使用
  • 模板包含
    • HTML的靜態部分
    • 動態插入內容部分
  • Django模板語言,簡寫DTL,定義在django.template包中
  • 由startproject命令生成的settings.py定義關于模板的值:
    • DIRS定義了一個目錄列表,模板引擎按列表順序搜索這些目錄以查找模板源文件
    • APP_DIRS告訴模板引擎是否應該在每個已安裝的應用中查找模板
  • 常用方式:在項目的根目錄下創建templates目錄,設置DIRS值
DIRS=[os.path.join(BASE_DIR,"templates")]

模板處理

  • Django處理模板分為兩個階段
  • Step1 加載:根據給定的標識找到模板然后預處理,通常會將它編譯好放在內存中
loader.get_template(template_name),返回一個Template對象
  • Step2 渲染:使用Context數據對模板插值并返回生成的字符串
Template對象的render(RequestContext)方法,使用context渲染模板
  • 加載渲染完整代碼:
from django.template import loader, RequestContext
from django.http import HttpResponsedef index(request):tem = loader.get_template('temtest/index.html')context = RequestContext(request, {})return HttpResponse(tem.render(context))

快捷函數

  • 為了減少加載模板、渲染模板的重復代碼,django提供了快捷函數
  • render_to_string("")
  • render(request,'模板',context)
from django.shortcuts import renderdef index(request):return render(request, 'temtest/index.html')

定義模板

  • 模板語言包括
    • 變量
    • 標簽 { % 代碼塊 % }
    • 過濾器
    • 注釋{# 代碼或html #}

變量

  • 語法:
{{ variable }}
  • 當模版引擎遇到一個變量,將計算這個變量,然后將結果輸出
  • 變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成
  • 當模版引擎遇到點("."),會按照下列順序查詢:
    1. 字典查詢,例如:foo["bar"]
    2. 屬性或方法查詢,例如:foo.bar
    3. 數字索引查詢,例如:foo[bar]
  • 如果變量不存在, 模版系統將插入'' (空字符串)
  • 在模板中調用方法時不能傳遞參數

在模板中調用對象的方法

  • 在models.py中定義類HeroInfo
from django.db import modelsclass HeroInfo(models.Model):...def showName(self):return self.hname
  • 在views.py中傳遞HeroInfo對象
from django.shortcuts import render
from models import *def index(request):hero = HeroInfo(hname='abc')context = {'hero': hero}return render(request, 'temtest/detail.html', context)
  • 在模板detail.html中調用
{{hero.showName}}

標簽

  • 語法:{ % tag % }
  • 作用
    • 在輸出中創建文本
    • 控制循環或邏輯
    • 加載外部信息到模板中供以后的變量使用
  • for標簽
{ %for ... in ...%}
循環邏輯
{{forloop.counter}}表示當前是第幾次循環
{ %empty%}
給出的列表為或列表不存在時,執行此處
{ %endfor%}
  • if標簽
{ %if ...%}
邏輯1
{ %elif ...%}
邏輯2
{ %else%}
邏輯3
{ %endif%}
  • comment標簽
{ % comment % }
多行注釋
{ % endcomment % }
  • include:加載模板并以標簽內的參數渲染
{ %include "foo/bar.html" % }
  • url:反向解析
{ % url 'name' p1 p2 %}
  • csrf_token:這個標簽用于跨站請求偽造保護
{ % csrf_token %}
  • 布爾標簽:and、or,and比or的優先級高
  • block、extends:詳見“模板繼承”
  • autoescape:詳見“HTML轉義”

過濾器

  • 語法:{ { 變量|過濾器 }},例如{ { name|lower }},表示將變量name的值變為小寫輸出
  • 使用管道符號 (|)來應用過濾器
  • 通過使用過濾器來改變變量的計算結果
  • 可以在if標簽中使用過濾器結合運算符
if list1|length > 1
  • 過濾器能夠被“串聯”,構成過濾器鏈
name|lower|upper
  • 過濾器可以傳遞參數,參數使用引號包起來
list|join:", "
  • default:如果一個變量沒有被提供,或者值為false或空,則使用默認值,否則使用變量的值
value|default:"什么也沒有"
  • date:根據給定格式對一個date變量格式化
value|date:'Y-m-d'
  • escape:詳見“HTML轉義”
  • 點擊查看詳細的過濾器

注釋

  • 單行注釋
{#...#}
  • 注釋可以包含任何模版代碼,有效的或者無效的都可以
{# { % if foo % }bar{ % else % } #}
  • 使用comment標簽注釋模版中的多行內容

示例

  • 查詢所有英雄信息顯示出來,要求奇數行顯示為紅色,偶數行顯示為藍色

?

總結

以上是生活随笔為你收集整理的Django 模板4.1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。