Django 模板(Template)

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")]

方式二:在應用的目錄下創建 templates 目錄,則無需配置 DIRS 值,程序會自動在該目錄下尋找模板。

模板處理

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')

  

2. 模板語言 DTL

模板語言包括:

  • 變量  {{ 變量名 }}
  • 標簽  { % 代碼塊 % }
  • 過濾器
  • 注釋  {# 代碼或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}}

標簽

語法:

{% 代碼塊 %}

作用:

  • 在輸出中創建文本
  • 控制循環或邏輯
  • 加載外部信息到模板,供以后的變量使用

for 標簽

語法:

{% for ... in ... %}
# 循環體中的邏輯
{{forloop.counter}}  # 表示當前是第幾次循環(從1開始)
{% empty %}
# 給出的列表為空或列表不存在時,執行此處。類似于 else
{% endfor %}  # for 循環的結束標識

示例:

<body>
{% for hero_obj in hero %}{{ forloop.counter }}: {{hero_obj.show}}<br/>
{% empty %}<h2>啥也沒找到...</h2>
{% endfor %}
</body>1: 郭靖
2: 黃蓉
3: 比伯
4: 王嘉爾
5: 歐陽鋒

if 標簽

語法&#

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

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

相關文章

Word 文字編輯狀態下按回車換行后是非正文格式

在Word里編輯時&#xff0c;按回車后新段落突然變成標題1、標題2這類格式&#xff0c;不再是正文樣式&#xff0c;這通常是因為「正文」的樣式設置出了問題——可能被默認設置成“后續段落自動應用標題1/標題2格式”了。 修改方法很簡單&#xff1a; 找到并打開「正文」樣式的修…

PySide6 UI 靈活性:QToolBar 的浮動與停靠及 QSplitter 的可調整面板

PySide6 UI 靈活性&#xff1a;QToolBar 的浮動與停靠及 QSplitter 的可調整面板 在現代桌面應用程序開發中&#xff0c;提供靈活且用戶友好的界面至關重要。PySide6&#xff08;Qt for Python&#xff09;提供了強大的工具來構建這樣的界面。本文將深入探討兩個關鍵的 PySide6…

B4016 樹的直徑

B4016 樹的直徑 - 洛谷 題目描述 給定一棵 n 個結點的樹&#xff0c;樹沒有邊權。請求出樹的直徑是多少&#xff0c;即樹上最長的不重復經過一個點的路徑長度是多少。 輸入格式 第一行輸入一個正整數 n&#xff0c;表示結點個數。 第二行開始&#xff0c;往下一共 n - 1 行…

【一維 前綴和+差分】

一、一維前綴和 1.1 定義 給定一個數組 a[1..n]&#xff0c;其前綴和數組 pre[1..n] 定義為&#xff1a; pre[i]a[1]a[2]?a[i] pre[i] a[1] a[2] \dots a[i] pre[i]a[1]a[2]?a[i] 即 pre[i] 表示原數組從第 1 項到第 i 項的和。 1.2 構建 int a[N], pre[N]; for (int i …

Spring Boot 雙數據源配置

文章目錄什么是雙數據源&#xff1f;為什么需要雙數據源&#xff1f;核心實現原理完整示例注意什么是雙數據源&#xff1f; 雙數據源是指在一個應用程序中同時配置和使用兩個不同的數據庫連接。比如&#xff1a; 一個連接訂單數據庫&#xff0c;處理業務數據一個連接用戶中心…

【Java】【力扣】102.二叉樹層序遍歷

思路一個輔助隊列&#xff08;初始化隊列&#xff1a;根節點入隊&#xff09;一個節點 出隊&#xff0c;他的左右孩子入隊循環 直到隊列為空舉例代碼public List<List<Integer>> levelOrder(TreeNode root) {if (rootnull){return new ArrayList<List<Intege…

為什么有些PDF無法復制文字?原理分析與解決方案

在日常辦公和學習中&#xff0c;我們經常會從PDF文件中復制文字&#xff0c;用于編輯、引用、整理筆記。但你是否也遇到過這樣的情況&#xff1a;有些PDF中的文字根本無法選中&#xff0c;更無法復制粘貼&#xff1f; 看起來像是“文字”&#xff0c;但操作上卻完全無效——這…

LabVIEW瀏覽器ActiveX事件交互

?程序圍繞 WebBrowser ActiveX 控件&#xff0c;借 “Reg Event Callback” 注冊標題變更回調&#xff0c;“Callback - Title Change.vi” 處理標題數據&#xff0c;“Monitor...” 響應 URL 變更&#xff0c;“Unregister...” 清理資源&#xff0c;實現瀏覽器事件交互與管控…

C++后端面試八股文

一、C 語言基礎與底層原理請解釋 new / delete 和 malloc / free 的區別和聯系&#xff0c;以及使用它們時需要注意什么new 和 delete 是C的??運算符&#xff08;Operator&#xff09;??。這意味著它們可以被類&#xff08;通過 operator new 和 operator delete&#xff0…

基礎分類模型及回歸簡介(一)

一、先搞懂兩個核心任務&#xff1a;分類和回歸咱們生活中總遇到要 “判斷” 或 “預測” 的事&#xff1a;比如看到一個水果&#xff0c;判斷是蘋果還是橘子 —— 這就是分類&#xff08;結果是 “類別”&#xff09;&#xff1b;比如根據西瓜的大小、顏色&#xff0c;猜它能賣…

【LeetCode 熱題 100】114. 二叉樹展開為鏈表——(解法二)分治

Problem: 114. 二叉樹展開為鏈表 給你二叉樹的根結點 root &#xff0c;請你將它展開為一個單鏈表&#xff1a; 展開后的單鏈表應該同樣使用 TreeNode &#xff0c;其中 right 子指針指向鏈表中下一個結點&#xff0c;而左子指針始終為 null 。 展開后的單鏈表應該與二叉樹 先序…

【WPF】WPF 自定義控件 實戰詳解,含命令實現

&#x1f9e9;《WPF 自定義控件》實戰詳解本文將圍繞如何編寫一個自定義控件&#xff08;如帶右鍵菜單的圖片控件 ImageView&#xff09;&#xff0c;逐步講解其定義、命令綁定與 ContextMenu 中常見的語法技巧。&#x1f9f1; 一、創建一個 WPF 自定義控件的步驟 WPF 中自定義…

Flink 2.0 DataStream算子全景

在實時流處理中&#xff0c;Apache Flink的DataStream API算子是構建流處理 pipeline 的基礎單元。本文基于Flink 2.0&#xff0c;聚焦算子的核心概念、分類及高級特性。 一、算子核心概念&#xff1a;流處理的"原子操作 1. 數據流拓撲&#xff08;Stream Topology&#x…

Flask 入門到實戰(2):使用 SQLAlchemy 打造可持久化的數據層

Flask 入門到實戰&#xff1a;使用 SQLAlchemy 打造可持久化的數據層一、前言&#xff1a;為什么用 Flask-SQLAlchemy&#xff1f; 在 Python Web 開發中&#xff0c;操作數據庫的方式主要有兩種&#xff1a; 直接寫 SQL&#xff08;繁瑣且難維護&#xff09;使用 ORM&#xff…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | GithubProfies(GitHub 個人資料)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— GithubProfies組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script setup…

simscape中坐標系和坐標變換Frames and Transforms

為了更便捷地描述單個物體的運動&#xff0c;最好以該物體的質心為坐標原點建立坐標系&#xff0c;從而可以非常方便地描述其旋轉運動。因此&#xff0c;在計算多個物體之間的位置關系時&#xff0c;為了計算方便&#xff0c;需要頻繁地更換坐標框架&#xff0c;這也是multibod…

構建分布式光伏“四可”能力:支撐新型電力系統安全穩定運行的關鍵路徑

隨著我國新能源裝機規模的跨越式增長&#xff0c;國家能源戰略對新能源電站的規范化接入與精細化調度管理提出了更高要求。在電力市場化改革深化與新型電力系統構建的關鍵時期&#xff0c;保障電網安全穩定、提升新能源高效消納能力已成為核心議題。國家能源局于2025年1月17日正…

UART寄存器介紹

在 STM32 微控制器中&#xff0c;UART&#xff08;通用異步收發傳輸器&#xff09;通信通過多個寄存器實現配置和數據傳輸。下面詳細解析 UART 的核心寄存器及其功能。1. 狀態寄存器&#xff08;USART_SR&#xff09;狀態寄存器反映 UART 當前的工作狀態&#xff0c;用于判斷數…

寫一個算法對一組值進行歸一化映射,使它們在視覺上有明顯的區分度,尤其在數據集分布不均時仍能體現差異

問題&#xff1a; 有一批數據&#xff0c;都是隨機值范圍是不確定&#xff0c;我需要用這個值來繪制同樣數量圓&#xff0c;不同值他們的圓半徑不同&#xff0c;考慮到數據有時候大小偏差不大&#xff0c;這1000個值有可能是集中在10,20之間&#xff0c;也可能是分布廣泛&#…

具身智能零碎知識點(五):VAE中對使用KL散度的理解

VAE中對使用KL散度的理解什么是 VAE (Variational AutoEncoder)&#xff1f;從自編碼器 (AE) 說起VAE&#xff1a;讓潛在空間變得“有意義”和“連續”KL 散度是如何用到的&#xff1f;通俗理解 KL 散度在 VAE 中的作用&#xff1a;帶來的好處&#xff1a;KL 散度公式 (無需背誦…