Django 5實用指南(五)模板系統

Django5的模板系統是其核心功能之一,允許開發者將動態數據嵌入到HTML模板中,并根據不同的業務需求渲染頁面。Django模板系統基于 Django模板語言(DTL),它提供了一些強大的功能,如模板標簽、過濾器、條件語句和循環等,幫助開發者靈活地渲染和控制頁面內容。

本章將詳細介紹 Django5 的模板語言、模板標簽、過濾器及其自定義,幫助您深入理解如何在 Django 中使用模板系統。

5.1 Django5模板語言概述

Django 模板語言(DTL)是一種簡單、易學的語言,能夠有效地將動態內容注入到靜態HTML中。Django模板的基本結構包括以下幾個部分:

  • 模板變量:用于顯示動態數據。
  • 模板標簽:控制模板的邏輯(如條件語句、循環等)。
  • 模板過濾器:用于修改變量的輸出內容。

5.2 模板變量

模板變量用 {{ }}?包裹,通常來自于視圖傳遞的數據。你可以在視圖函數中傳遞數據到模板,然后使用模板變量將數據展示出來。

5.2.1 模板變量示例

假設你有一個 User?模型,并想顯示用戶的名字和郵箱。

視圖函數:

from?django.shortcuts import?render
from?.models import?Userdef?user_profile(request, user_id):user = User.objects.get(id=user_id)return?render(request, 'user_profile.html', {'user': user})

模板:

<!DOCTYPE html>
<html><head><title>{{ user.username }}'s Profile</title></head><body><h1>Welcome, {{ user.username }}!</h1><p>Email: {{ user.email }}</p></body>
</html>

在這個例子中,{{ user.username }}?和 {{ user.email }}?是模板變量,模板引擎會將它們替換為 user?對象中的 username?和 email?字段的值。

5.3 模板標簽

模板標簽用于實現更復雜的功能,如條件判斷、循環等。標簽使用 {% %}?包裹。常用的模板標簽包括 if、for、block?等。

5.3.1 條件語句(if?標簽)

if?標簽用于根據條件執行不同的代碼塊。在模板中,if?標簽用于判斷條件是否成立,如果成立則執行相應的代碼。

條件語句示例:

{% if user.is_authenticated %}<p>Welcome back, {{ user.username }}!</p>
{% else %}<p>Please log in to access your profile.</p>
{% endif %}

在這個示例中,Django會檢查 user.is_authenticated?是否為 True,如果是,則顯示歡迎信息,否則提示用戶登錄。

5.3.2 循環語句(for?標簽)

for?標簽用于循環遍歷一個序列(如列表、字典等)。在模板中,常用的 for?標簽用于遍歷列表或查詢集。

循環語句示例:

<ul>{% for post in posts %}<li>{{ post.title }} - {{ post.created_at }}</li>{% empty %}<li>No posts available.</li>{% endfor %}
</ul>

在這個例子中,{% for post in posts %}?遍歷 posts?列表中的每個 post?對象,顯示文章的標題和創建時間。如果列表為空,則顯示 No posts available。

5.3.3 引入模板(include?標簽)

include?標簽允許在一個模板中嵌入另一個模板,通常用于重復的頁面結構,如頭部、腳部等。

引入模板示例:

{% include 'header.html' %}<h1>{{ title }}</h1>
{% include 'footer.html' %}

在這個例子中,header.html?和 footer.html?是獨立的模板文件,include?標簽將它們嵌入到當前模板中。

5.4 模板過濾器

模板過濾器用于修改變量的顯示方式。它們在模板變量后面用 |?分隔。例如,{{ value|lower }}?會將 value?變量轉換為小寫字母。

5.4.1 常見過濾器

date:格式化日期

<p>Published on: {{ post.created_at|date:"Y-m-d" }}</p>

default:如果變量為空,則使用默認值

<p>{{ user.bio|default:"This user has not updated their bio." }}</p>

length:返回一個列表或字符串的長度

<p>Number of posts: {{ posts|length }}</p>

lower:將字符串轉換為小寫

<p>{{ user.username|lower }}</p>

join:將列表元素連接成一個字符串

<p>{{ tags|join:", " }}</p>

5.4.2 自定義過濾器

Django 允許開發者創建自定義過濾器,以便在模板中使用。

自定義過濾器示例:

  1. 創建過濾器:

在 templatetags?目錄下創建一個 custom_filters.py?文件:

from?django import?templateregister = template.Library()@register.filter
def?add_suffix(value, suffix):return?f"{value}{suffix}"

加載并使用過濾器:

在模板中使用自定義過濾器之前,首先需要加載該過濾器:

{% load custom_filters %}<p>{{ user.username|add_suffix:"_profile" }}</p>

在這個例子中,add_suffix?過濾器會將用戶的用戶名添加一個后綴 "_profile"。

5.5 模板繼承與塊(Block)

模板繼承是 Django 模板系統的一個重要特性,它允許你創建一個基本的“框架”模板,并在子模板中插入特定內容。

5.5.1 基本模板(父模板)

父模板定義了網頁的基本結構,如頭部、導航欄、腳本等。使用 {% block %}?標簽定義可以被子模板覆蓋的部分。

父模板(base.html):

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>{% block title %}My Website{% endblock %}</title></head><body><header><h1>Welcome to My Website</h1></header><nav><a href="/">Home</a>?| <a href="/about">About</a></nav><main>{% block content %}Default content{% endblock %}</main><footer><p>??2023 My Website</p></footer></body>
</html>
5.5.2 子模板

子模板繼承自父模板,并覆蓋其中的塊部分。

子模板(home.html):

{% extends 'base.html' %}{% block title %}Home - My Website{% endblock %}{% block content %}<h2>Welcome to the home page!</h2><p>This is where the content goes.</p>{% endblock %}

通過 {% extends %}?和 {% block %}?標簽,子模板可以繼承父模板的結構,并定制其內容。

5.6 模板的性能優化

在 Django 項目中,模板渲染的性能非常重要,尤其是在高流量的 Web 應用中。以下是一些優化模板性能的方法:

緩存模板:使用 Django 的模板緩存機制,減少重復渲染的開銷。

{% load cache %}{% cache 600?sidebar %}<!-- 這里是需要緩存的內容 -->{% endcache %}

避免過多的循環和條件判斷:盡量避免在模板中進行復雜的計算和大量的循環。

靜態文件和媒體文件的優化:確保在模板中使用 static?標簽來引用靜態文件,并設置適當的緩存策略。

小結

本章深入介紹了 Django5 中的模板系統,包括模板變量、模板標簽、過濾器的使用,以及如何自定義過濾器。我們還講解了模板繼承和塊的概念,使得在大型項目中復用模板變得更加容易。通過有效的模板管理,Django5 提供了一個靈活、強大的系統來動態渲染和展示數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70452.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70452.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70452.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uni-app開發app時 使用uni.chooseLocation遇到的問題

問題一&#xff1a;不顯示 問題二&#xff1a;選擇地址列表一直在加載中 因為 uni-app 接口文檔 中已經說明&#xff0c;使用騰訊的話需要開啟云服務&#xff0c;具體可看官網&#xff0c;這就是為什么使用時直接不顯示的原因&#xff0c;所以我使用的高德&#xff0c;但又出現…

推薦系統-排序模型

本次學習的重點是FM系列和WideNDeep系列。其實這兩個模型是存在因果關系的。從最初的LR模型開始&#xff0c;因為缺失高效的特征交互方式&#xff0c;產生了FM模型&#xff0c;即通過向量內積代替特征之間的兩兩交互的參數。最后DNN的引入可以建模更高階的特征。但是DNN如何與F…

體驗用ai做了個python小游戲

體驗用ai做了個python小游戲 寫在前面使用的工具2.增加功能1.要求增加視頻作為背景。2.我讓增加了一個歡迎頁面。3.我發現中文顯示有問題。4.我提出了背景修改意見&#xff0c;歡迎頁面和結束頁面背景是視頻&#xff0c;游戲頁面背景是靜態圖片。5.提出增加更多游戲元素。 總結…

c#爬取數據并解析json

安裝 Newtonsoft.Json Install-Package Newtonsoft.Json代碼 HttpClient client new HttpClient();// 獲取網頁內容HttpResponseMessage response client.GetAsync("https://opentdb.com/api.php?amount10&category18&difficultyeasy&typemultiple"…

計算機畢業設計Python農產品推薦系統 農產品爬蟲 農產品可視化 農產品大數據(源碼+LW文檔+PPT+講解)

溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 作者簡介&#xff1a;Java領…

【分布式理論13】分布式存儲:數據存儲難題與解決之道

文章目錄 一、數據存儲面臨的問題二、RAID磁盤陣列的解決方案1. RAID概述2. RAID使用的技術3. RAID的代表性等級 三、分布式存儲的新思路1. 分布式存儲背景與特點2. 分布式存儲的組成要素 一、數據存儲面臨的問題 在單機系統時代&#xff0c;當數據量不斷增加、硬盤空間不夠時…

高德地圖android sdk(備忘)

依賴 // 權限請求框架&#xff1a;https://github.com/getActivity/XXPermissions implementation com.github.getActivity:XXPermissions:20.0 // https://mvnrepository.com/artifact/com.amap.api/navi-3dmap-location-search implementation com.amap.api:navi-3dmap-loca…

DeepSeek、微信、硅基流動、納米搜索、秘塔搜索……十種不同方法實現DeepSeek使用自由

為了讓大家實現 DeepSeek 使用自由&#xff0c;今天分享 10 個暢用 DeepSeek 的平臺。 一、官方滿血版&#xff1a;DeepSeek官網與APP 首推&#xff0c;肯定是 DeepSeek 的官網和 APP&#xff0c;可以使用滿血版 R1 和 V3 模型&#xff0c;以及聯網功能。 網址&#xff1a; htt…

自動化之ansible(二)

一、ansible中playbook&#xff08;劇本&#xff09; 官方文檔&#xff1a; Ansible playbooks — Ansible Community Documentation 1、playbook的基本結構 一個基本的playbook由以下幾個主要部分組成 hosts: 定義要執行任務的主機組或主機。 become: 是否需要使用超級用戶…

python 神經網絡教程,神經網絡模型代碼python,小白入門基礎教程

文章目錄 前言1. 神經網絡基礎概念1.1 神經元1.2 激活函數1.3 神經網絡結構1.4 安裝 Python1.5 選擇開發環境2. 使用numpy構建簡單神經網絡 3. 使用PyTorch構建復雜神經網絡 前言 本教程旨在為廣大初學者和有一定基礎的開發者提供一個系統、全面且深入的 Python 神經網絡學習指…

SOME/IP--協議英文原文講解10

前言 SOME/IP協議越來越多的用于汽車電子行業中&#xff0c;關于協議詳細完全的中文資料卻沒有&#xff0c;所以我將結合工作經驗并對照英文原版協議做一系列的文章。基本分三大塊&#xff1a; 1. SOME/IP協議講解 2. SOME/IP-SD協議講解 3. python/C舉例調試講解 4.2.2 Req…

Spring框架基本使用(Maven詳解)

前言&#xff1a; 當我們創建項目的時候&#xff0c;第一步少不了搭建環境的相關準備工作。 那么如果想讓我們的項目做起來方便快捷&#xff0c;應該引入更多的管理工具&#xff0c;幫我們管理。 Maven的出現幫我們大大解決了管理的難題&#xff01;&#xff01; Maven&#xf…

用大內存主機下載Visual Studio

用一臺內存達到128G的主機下載Visual Studio 2022&#xff0c;用的是公司網絡。下載速度讓我吃了一驚&#xff0c;沒人用網絡了&#xff1f;還是網站提速了&#xff1f;以前最大只能達到5MB/秒。記錄這段經歷&#xff0c;是用來分析公司網絡用的......

Ubuntu20.04.2安裝Vmware tools

軟件版本&#xff1a;Vmware Workstation Pro 17.6.2 操作系統鏡像文件&#xff1a;ubuntu-20.04.2-desktop-amd64 方式1&#xff1a;用iso鏡像安裝 沒用這種方法&#xff0c;太麻煩 方式2&#xff1a;用apt安裝Open VM Tools 如果你使用的是較新的Ubuntu版本&#xff08;如…

Mac系統下使用Docker快速部署MaxKB:打造本地知識庫問答系統

隨著大語言模型的廣泛應用&#xff0c;知識庫問答系統逐漸成為提升工作效率和個人學習的有力工具。MaxKB是一款基于LLM&#xff08;Large Language Model&#xff09;大語言模型的知識庫問答系統&#xff0c;支持多模型對接、文檔上傳和自動爬取等功能。本文將詳細介紹如何在Ma…

2526考研資料分享 百度網盤

通過網盤分享的文件&#xff1a;01、2026【考研數學】 鏈接: https://pan.baidu.com/s/1N-TlXcCKMcX1U-KBr0Oejg?pwducbe 提取碼: ucbe 提取碼:98wg--來自百度網盤超級會員v3的分享 通過網盤分享的文件&#xff1a;01、2026【考研政治】 鏈接: https://pan.baidu.com/s/1N-T…

【信息系統項目管理師-案例真題】2013下半年案例分析答案和詳解

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 試題一【問題? 1】(12 分)【問題? 2】(10 分)【問題 3】( 3 分 )試題二【問題? 1】(3? 分)【問題? 2】(10? 分)【問題? 3】(3? 分)【問題? 4】(9? 分)試題三【問題? 1】(12? 分)?【問題? 2】(8?…

idea連接gitee(使用idea遠程兼容gitee)

文章目錄 先登錄你的gitee拿到你的郵箱找到idea的設置選擇密碼方式登錄填寫你的郵箱和密碼登錄成功 先登錄你的gitee拿到你的郵箱 具體位置在gitee–>設置–>郵箱管理 找到idea的設置 選擇密碼方式登錄 填寫你的郵箱和密碼 登錄成功

UNIAPP開發之利用阿里RTC服務實現音視頻通話后端THINKPHP5

下面是一個使用ThinkPHP 5實現后端邏輯的示例。我們將創建一個簡單的ThinkPHP 5項目來處理生成推流和播流地址的請求。 后端部分&#xff08;ThinkPHP 5&#xff09; 1. 初始化ThinkPHP 5項目 首先&#xff0c;確保你已經安裝了Composer。然后使用Composer創建一個新的Think…

嵌入式開發崗位認識

目錄 1.核心定義2.崗位方向3.行業方向4.技術方向5.工作職責6.核心技能7.等級標準8.優勢與劣勢9.市場薪資10. 發展路徑11. 市場趨勢12. 技術趨勢 1.核心定義 嵌入式系統&#xff1a; 以應用為中心&#xff0c;以計算機技術為基礎&#xff0c;軟硬件可裁剪的專用計算機系統 特點…