Django基礎(三)———模板

前言

在之前的文章中,視圖函數只是直接返回文本,而在實際生產環境中其實很少這樣用,因為實際的頁面大多是帶有樣式的HTML代碼,這可以讓瀏覽器渲染出非常漂亮的頁面。目前市面上有非常多的模板系統,其中最知名最好用的就是DTL和jinja2。DTL是Django Template Language 三個單詞的縮寫,也就是Django自帶的模板語言。當然也可以配置Django支持jinja2等其他模板引擎,但是作為Django內置的模板語言,和Django可以達到無縫銜接而不會產生一些不兼容的情況。因此建議大家學習好DTL。


一、DEL與普通的HTML文件的區別

DTL模板是一種帶有特殊語法的HTML文件,這個HTML文件可以被Django編譯,可以傳遞參數進去,實現數據動態化。在編譯完成后,生成一個普通的HTML文件,然后發送給客戶端。

二、渲染模板?

Django提供了一個簡便的方式,直接將模板染成字符串和包裝成HttpResponse對象一步到位完成。

1.創建templates文件夾,所有的html模板將放入其中

2.找到settings.py文件將模板路徑輸入其中

'DIRS': [os.path.join(BASE_DIR,'./templates')],

?3.準備HTML模板 index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>你好</title>
</head>
<body><h1>我的第一個標題</h1><p>我的第一個段落</p>
</body>
</html>

4.編寫視圖函數

#app應用中 views.py文件
from django.shortcuts import render
#模板應用
def index(request):return render(request,template_name="index.html")

5.編寫路由

#app應用中 urls.py文件
from django.contrib import admin
from django.urls import path
from app import views
urlpatterns = [path('admin/', admin.site.urls),path('',views.index, name='index')

三、DTL模板語法

1.變量

模板中可以包含變量,Django在渲染模板的時候,可以傳遞變量對應的值過去進行替換。變量的命名規范和Python非常類似,只能是阿拉伯數字和英文字符以及下劃線的組合,不能出現標點符號等特殊字符。變量需要通過視圖函數渲染,視圖函數在使用render或者render_to_string的時候可以傳遞一個context的參數,這個參數是一個字典類型。以后在模板中的變量就從這個字典中讀取值的。

1.編寫視圖函數

#app應用中 views.py文件
#動態傳值
def info(request):#1.普通變量username = '你好,世界'# return render(request,template_name="info.html", context={'username':username})#2.字典類型book = {'name':"水滸傳",'author':'施耐庵'}# return render(request, template_name="info.html", context={'username': username,'book':book})#3.列表類型books = [{'name':'水滸傳','author':'施耐庵'},{'name':'三國演義','author':'羅貫中'}]# context = {#     'username':username,#     'book':book,#     'books':books# }# return render(request, template_name="info.html", context=context)#4.對象class Person:def __init__(self):self.realname = '張安'context = {'username': username,'book': book,'books': books,'person':Person()}return render(request, template_name="info.html", context=context)

2.編寫路由

#app應該中 urls.py文件
from django.contrib import admin
from django.urls import path
from app import viewsurlpatterns = [path('admin/', admin.site.urls),path('',views.index, name='index'),path('info',views.info,name='info')]

3.編寫html文件(info.html)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>你好</title>
</head>
<body><h1>{{ username }}</h1><h1>{{ book.name }}</h1><h1>{{ books.1.name}}</h1><h1>{{ person.realname}}</h1></body>
</html>

四、常用標簽

1.if標簽

if標簽:if標簽相當于python中的if語句,有elif和else相對應,但是所有的標簽都需要用標簽符號({%%})進行包裹。if標簽中可以使用=、!=、<、<=、>、>=、in、not in、is、is not等運算符

1.編寫視圖函數

#app應用views.py中l
def index(request):age = 20return render(request,template_name='index.html',context={'age':age})

2.編寫路由

#主路由 urls.py
path('if',views.if_,name='if')

3.編寫html

#if.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>你好</title>
</head>
<body>{% if age > 18 %}<p>你可以進去了</p>{% elif age < 18 %}<p>你不可以進去</p>{% endif %}
</body>
</html>

2.for標簽

for...in...標簽:for...in...類似于python中的for...in...。可以遍歷列表、元組、字符串、字典等一切可以遍歷的對象。

1.編寫視圖函數

#app應用 views.py中
def for_(request):#1.列表books = [{'name': '水滸傳', 'author': '施耐庵'},{'name': '三國演義', 'author': '羅貫中'}]#2.字典# for x in person.items/keys/valuesperson ={'realname':"張三","age":18,"height":180}context = {'books':books,"person":person}return render(request,template_name='for.html',context=context)

2.編寫路由

#主路由的urls.py
path('for',views.for_,name='for')

3.編寫html

#for.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>你好</title>
</head>
<body><table><tbody>{% for book in books %}<tr><td>{{ book.name }}</td><td>{{ book.author }}</td></tr>{% endfor %}</tbody>
</table>
<div>{% for key, value in person.items %}<p> {{ key }} : {{ value }} </p>{% endfor %}
</div>
</body>
</html>

如果想要反向遍歷,那么在遍歷的時候就加上一個reversed。

{% for person in persons reversed %}<p>{{ person.name }}</p>
{% endfor %}

在for循環中,DTL提供了一些變量可供使用。這些變量如下:

  • forloop.counter:當前循環的下標。以1作為起始值。

  • forloop.counter0:當前循環的下標。以0作為起始值。 forloop.revcounter:當前循環的反向下標值。比如列表有5個元素,那么第一次遍歷這個屬性是等于5,第二次是4,以此類推。并且是以1作為最后一個元素的下標。

  • forloop.revcounter0:類似于for1oop.revcounter。不同的是最后一個元素的下標是從0開始。

  • forloop.first:是否是第一次遍歷。

  • forloop.last:是否是最后一次遍歷

  • forloop.parentloop:如果有多個循環嵌套,那么這個屬性代表的是上一級的for循環。

3.with標簽

with標簽:在模版中定義變量。有時候一個變量訪問的時候比較復雜,那么可以先把這個復雜的變量緩存到一個變量上,以后就可以直接使用這個變量就可以了。

1.編寫視圖函數

#app應用 views.py中
def with_(request):context ={'books':[{'name': '水滸傳', 'author': '施耐庵'},{'name': '三國演義', 'author': '羅貫中'}]}return render(request,template_name='with.html',context=context)

?2.編寫路由

#主路由中的urls.pypath('with',views.with_,name='with')

3.編寫html

#with.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>你好</title>
</head>
<body>{% with book1 = book.1 %}<p>{{ book1.name }}/{{ book1.author }}</p>
{% endwith %}</body>
</html>

4.url標簽

url標簽:在模版中,我們經常要寫一些url,比如某個a標簽中需要定義href屬性。當然如果通過硬編碼的方式直接將這個url寫死在里面也是可以的。但是這樣對于以后項目維護可能不是一件好事。因此建議使用這種反轉的方式來實現,類似于django中的reverse一樣。

1.編寫視圖函數

#app應用 views.py中
def url_(request):return render(request,template_name='url.html')def book_id(request,book_id):return HttpResponse("您的圖書id:{}".format(book_id))

2.編寫路由

#主路由中的urls.pypath('url',views.url_,name='url'),path('book/int:<book_id>',views.book_id,name='book_id')

3.編寫html

#url.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>你好</title>
</head>
<body><a href="{% url 'for' %}">for.html</a>
<a href="{% url 'book_id' 1 %}">圖書列表</a></body>
</html>

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

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

相關文章

mysql6表清理跟回收空間

mysql6表清理跟回收空間 文章目錄mysql6表清理跟回收空間1.清理表2.備份表或者備份庫3.回收表空間4.查看5.驗證業務1.清理表 ## 登錄 C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -p Enter password: ****** Welcome to the MySQL monitor. Commands end w…

Java-74 深入淺出 RPC Dubbo Admin可視化管理 安裝使用 源碼編譯、Docker啟動

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-30-新發布【1T 萬億】參數量大模型&#xff01;K…

VSCode同時支持Vue2和Vue3開發的插件指南

引言 隨著Vue生態系統的演進&#xff0c;許多開發者面臨著在同一開發環境中同時處理Vue 2和Vue 3項目的需求。Visual Studio Code (VSCode)作為最受歡迎的前端開發工具之一&#xff0c;其插件生態對Vue的支持程度直接影響開發效率。本文將深入探討如何在VSCode中配置插件組合&a…

卷積神經網絡CNN的Python實現

一、環境準備與庫導入 在開始實現卷積神經網絡之前&#xff0c;需要確保開發環境已正確配置&#xff0c;并導入必要的Python庫。常用的深度學習框架有TensorFlow和PyTorch&#xff0c;本示例將基于Keras&#xff08;可使用TensorFlow后端&#xff09;進行實現&#xff0c;因為K…

js是實現記住密碼自動填充功能

記住密碼自動填充使用js實現記住密碼功能&#xff0c;在下次打開登陸頁面的時候進行獲取并自動填充到頁面【cookie和localStorage】使用js實現記住密碼功能&#xff0c;在下次打開登陸頁面的時候進行獲取并自動填充到頁面【cookie和localStorage】 //添加功能----記住上一個登陸…

【Java】文件編輯器

代碼&#xff1a;&#xff08;SimpleEditor.java&#xff09;import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.BorderLayout;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import java.io.BufferedReader…

PyTorch中torch.topk()詳解:快速獲取最大值索引

torch.topk(similarities, k=2).indices 是什么意思 torch.topk(similarities, k=2).indices 是 PyTorch 中用于獲取張量中最大值元素及其索引的函數。在你的代碼中,它的作用是從 similarities 向量里找出得分最高的2個元素的位置索引。 1. 核心功能:找出張量中最大的k個值…

快速搭建本地HTTP服務器:`python -m http.server`詳解

文章目錄 一、什么是 http.server? 二、基礎使用 1. 啟動服務器 2. 指定端口 3. 綁定特定IP 三、實際應用場景 1. 本地前端開發 2. 文件共享 3. 啟用CGI腳本(高級) 四、目錄瀏覽詳解* 五、安全注意事項 六、進階技巧 1. 后臺運行(Linux/macOS) 2. 自定義錯誤頁面 3. 結合其…

運維技術教程之Jenkins上的known_hosts文件

在Jenkins中&#xff0c;known_hosts文件用于存儲已驗證的遠程節點主機密鑰&#xff0c;避免每次連接時重復驗證。以下是基于不同場景的解決方案&#xff1a;1. 創建并配置 known_hosts 文件 若Jenkins提示 No Known Hosts file 或找不到文件&#xff0c;需手動創建并配置&…

leetcode 3201. 找出有效子序列的最大長度 I 中等

給你一個整數數組 nums。nums 的子序列 sub 的長度為 x &#xff0c;如果其滿足以下條件&#xff0c;則稱其為 有效子序列&#xff1a;(sub[0] sub[1]) % 2 (sub[1] sub[2]) % 2 ... (sub[x - 2] sub[x - 1]) % 2返回 nums 的 最長的有效子序列 的長度。一個 子序列 指的…

Java并發編程第三篇(深入解析Synchronized)

1. Synchronized簡介&#xff1a;一個常見的并發“陷阱” 在正式開始學習新知識前&#xff0c;我們不妨先來看一個現象&#xff0c;這是一個很多并發編程新手都會遇到的“陷阱”&#xff1a; public class SynchronizedDemo implements Runnable {// 共享變量private static in…

Chatbox AI|多模型多模態交互+MCP,一個工具打造你的全能私人助手

ChatBoxAI集成GPT-4、Claude等頂尖模型&#xff0c;支持Windows/macOS/Linux多平臺&#xff0c;具備隱私加密、文件智能解析&#xff08;PDF/代碼/圖片&#xff09;及開發者友好特性。其應用覆蓋自媒體創作、代碼實時預覽、AI繪圖&#xff08;封面/表情包&#xff09;及聯網搜索…

在Autodl服務器中使用VNC建立圖形界面

在Autodl服務器中使用VNC建立圖形界面**AutoDL 3D 圖形桌面搭建教程****第一步&#xff1a;安裝桌面和 VNC****第二步&#xff1a;進行一次性配置****第三步&#xff1a;日常啟動與使用**AutoDL 3D 圖形桌面搭建教程 目標: 在你的 AutoDL 環境上&#xff0c;以最少的步驟搭建一…

CD54.【C++ Dev】vector和list的反向迭代器的實現

目錄 1.反向迭代器的功能 2.算法 方法1:新寫一個類用于反向迭代器 方法2:封裝正向迭代器實現反向迭代器 解析operator* 正向迭代器和反向迭代器的關系 返回 *--tmp的原因 3.為自制的vector和list編寫反向迭代器 編寫統一的反向迭代器 修改vector頭文件 修改list頭文…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘django’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘django’問題 摘要 在日常 Django 項目開發中&#xff0c;最常見的“攔路虎”之一就是 ModuleNotFoundError: No module named django。該異常通常在以下場景出…

單頁面和多頁面的區別和優缺點

單頁面應用&#xff08;SPA&#xff09;與多頁面應用&#xff08;MPA&#xff09;的區別單頁面應用&#xff08;SPA&#xff09;整個應用只有一個HTML文件&#xff0c;內容通過JavaScript動態加載和渲染。頁面切換時無需重新加載整個頁面&#xff0c;僅更新部分DOM。依賴前端框…

暑期自學嵌入式——Day05(C語言階段)

接續上文&#xff1a;暑期自學嵌入式——Day04&#xff08;C語言階段&#xff09;-CSDN博客 點關注不迷路喲。你的點贊、收藏&#xff0c;一鍵三連&#xff0c;是我持續更新的動力喲&#xff01;&#xff01;&#xff01; 主頁&#xff1a; 一位搞嵌入式的 genius-CSDN博客 …

通用人工智能AGI遙遙無期,面臨幻滅

通用人工智能AGI有可能2080年前也實現不了 首先說一下&#xff0c;目前的人工智能方向是錯的&#xff0c;通用人工智能不值得追捧。 真的特別無奈&#xff0c;現在還有很多人在吹AI&#xff0c;說什么2027年就能實現AGI&#xff0c;如果你指的是真正的強人工智能AGI&#xff0c…

智能體開發工具鏈全景圖:IDE、調試器與監控平臺

智能體開發工具鏈全景圖&#xff1a;IDE、調試器與監控平臺 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 ? 用代碼丈量世界&…

三十四、【擴展工具篇】JSON 格式化與解析:集成 Monaco Editor 打造在線 JSON 工具

三十四、【擴展工具篇】JSON 格式化與解析:集成 Monaco Editor 打造在線 JSON 工具 前言 功能概覽 技術選型 實現步驟 第一步:添加路由和側邊欄菜單入口 第二步:創建 JSON 工具頁面 第三部分:全面測試與驗證 總結 前言 在日常的接口開發和測試中,我們經常需要處理 JSON 數…