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 += bookres_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>在模板中輸出變量語法如下,變量可能是從視圖中傳遞過來的,也可能是在模板中定義的。
{{ 變量名 }}在模板中編寫代碼段語法如下:
{% 代碼段 %}更多模板語法這里就不一一敘述了。
視圖調用模板
調用模板分為三步驟:
- 找到模板
- 定義上下文
- 渲染模板
在瀏覽器上訪問 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模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 静态后台管理系统的搭建
- 下一篇: Cheat Engine(CE)----