Django教程 —— Django模板
標簽: Django開發教程 python django Django模板
引言
如何向請求者返回一個漂亮的頁面呢?
肯定需要用到
html、css
,如果想要更炫的效果還要加入js
,問題來了,這么一堆字符串全都寫到視圖中,作為HttpResponse()
的參數嗎?
先看看如何拼接 html
# -*- coding:utf-8 -*-
"""
@Author :Hui
@Desc :{book應用視圖模塊}
"""
from django.views import View
from django.http import HttpResponse
# /book/index
def index(request):
"""圖書首頁"""
if request.method == "GET":
res_html = "<h1>GET請求 - 圖書信息頁</h1><br/>"
books = ["射雕英雄傳", "神雕俠侶", "倚天屠龍記"]
res_html += "<ul>"
for book in books:
res_html += "<li>"
res_html += book
res_html += "</li>"
res_html += "</ul>"
return HttpResponse(res_html)
這樣定義就太麻煩了吧,并且定義字符串是不會出任何效果和錯誤,如果有一個專門定義前端頁面的地方就好了。
在 Django
中,將前端的內容定義在 模板
中,然后再把模板交給視圖調用,各種漂亮、炫酷的效果就出現了。
運行環境
- Python 3.9
- Django 3.1.2
Django模板
創建模板
在 Django
項目下創建 templates
目錄然后在創建 book
目錄,代表這存放著 book
應用的模板文件。
目錄結構如下圖:
配置模板
在 Django
項目下的 setting.py
文件中找到 TEMPLATES
配置選項,配置如下目錄路徑
'DIRS': [BASE_DIR / 'templates']
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # 配置模板目錄
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
BASE_DIR = Path(__file__).resolve().parent.parent
BASE_DIR
是你 Django
項目的絕對路徑
可以在終端控制臺輸入如下命令
python manage.py shell
打開項目的 shell
終端進行調試。
定義模板
打開 templtes/book/index.html
文件,定義代碼如下:
<!DOCTYPE html>
<html lang="zh-hans">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>圖書信息</title>
</head>
<body>
<h2>{{ title }}</h2>
<ul>
{% for book in books %}
<li>{{ book.title }} --- {{ book.author }}</li>
{% endfor %}
</ul>
</body>
</html>
在模板中輸出變量語法如下,變量可能是從視圖中傳遞過來的,也可能是在模板中定義的。
{{ 變量名 }}
在模板中編寫代碼段語法如下:
{% 代碼段 %}
更多模板語法這里就不一一敘述了。
視圖調用模板
調用模板分為三步驟:
- 找到模板
- 定義上下文
- 渲染模板
from django.views import View
from book.models import BookInfo
from django.template import loader
from django.http import HttpResponse
# /book/info
class InfoView(View):
"""圖書信息視圖類"""
def get(self, request):
# 從數據庫中獲取圖書信息
books = BookInfo.objects.all()
# 獲取模板
tmp = loader.get_template('book/index.html')
# 定義上下文
context = {
"title": "圖書信息",
"books": books,
}
# 渲染模板
content = tmp.render(context)
return HttpResponse(content)
在瀏覽器上訪問 http://127.0.0.1:8000/book/info
效果如下圖
視圖調用模板簡寫
視圖調用模板都要執行以上三部分,于是 Django
提供了一個函數 render
封裝了以上代碼。
函數 render
包含3個參數:
- 第一個參數為
request
對象 - 第二個參數為
模板文件路徑
- 第三個參數為
字典
,表示向模板中傳遞的上下文數據
調用 render
的代碼如下:
from django.views import View
from book.models import BookInfo
from django.shortcuts import render
# /book/info
class InfoView(View):
"""圖書信息視圖類"""
def get(self, request):
# 從數據庫中獲取圖書信息
books = BookInfo.objects.all()
# 定義上下文
context = {
"title": "圖書信息",
"books": books,
}
return render(request, "book/index.html", context)
公眾號
新建文件夾X
大自然用數百億年創造出我們現實世界,而程序員用幾百年創造出一個完全不同的虛擬世界。我們用鍵盤敲出一磚一瓦,用大腦構建一切。人們把1000視為權威,我們反其道行之,捍衛1024的地位。我們不是鍵盤俠,我們只是平凡世界中不凡的締造者 。
智能推薦
Django教程 —— Django入門
目標 了解虛擬環境,熟悉Django項目、manage.py的指令、配置文件。 使用Django框架有一個全面的認識,包括開發流程、基本概念要素。 創建自己的第一個Django項目——圖書管理系統(BMSTest)。 準備開發環境 編程語言 版本 Python 3.9.0 這篇博客安裝教程挺詳細的:Python環境安裝教程 第三方庫/框架 版本 說明 Django 3.1....
Django基礎-----Django模板系統
一、視圖函數: 根據路徑定義函數,目的:導入不同功能的HTML頁面。 例:在views.py工作目錄下,定義函數: 其中,teacher.html是需要從django進入并且在瀏覽器顯示的頁面,放置在templates目錄下。 再去urls.py目錄下導入路徑,在導入路徑之前先導入views這個模塊: 然后放置路徑在路徑列表里,運行的時候就可以顯示想要顯示的頁面。格式如下: 其中,teacher/...
Django 模板語法取值
1、models.py 2、數據 3、views.py 分析:這里prodline1、prodline2、prodline3數據類型都是QuerySet,但內部數據是不同類型的。 prodline1內部是對象,prodline2內部是字段,prodline3內部是元組。 我們可以通過python manage.py shell 在命令行查看他們內部數據結構類型和數據結構 prodline1 獲取到...
Django Template(模板系統)
一、Django模板 內置模板標簽和過濾器 二、常用操作 兩種特殊符號: {{ }} 和 {% %} 變量相關的用: {{ }} 邏輯相關的用: {% %} 2.1 變量 在Django的模板語言中按此語法使用:{{ 變量...
猜你喜歡
Django 的模板繼承
1 和前面一樣,創建工程 2 配置 views.py 文件, urls.py 文件 3 新建templates 文件夾, 在里面新建兩個文件, index.html, home.html 4 在settings.py 文件添加路徑, 運行程序,如圖所示 因為是模板繼承,所以這里以bootstrap 框架為例,首先去官網 下載,我們只是簡單的頁面,所以只下載簡易版 5 新建一個staticfiles...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...