日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django教程 —— Django模板

發(fā)布時間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django教程 —— Django模板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引言

如何向請求者返回一個漂亮的頁面呢?

肯定需要用到 html、css ,如果想要更炫的效果還要加入 js,問題來了,這么一堆字符串全都寫到視圖中,作為 HttpResponse() 的參數(shù)嗎?

先看看如何拼接 html

# -*- coding:utf-8 -*- """ @Author :Hui @Desc :{book應(yīng)用視圖模塊} """ 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 中,將前端的內(nèi)容定義在 模板 中,然后再把模板交給視圖調(diào)用,各種漂亮、炫酷的效果就出現(xiàn)了。


運行環(huán)境

  • Python 3.9
  • Django 3.1.2

Django模板

創(chuàng)建模板

在 Django項目下創(chuàng)建 templates 目錄然后在創(chuàng)建 book 目錄,代表這存放著 book 應(yīng)用的模板文件。

目錄結(jié)構(gòu)如下圖:


配置模板

在 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 終端進行調(diào)試。


定義模板

打開 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>

在模板中輸出變量語法如下,變量可能是從視圖中傳遞過來的,也可能是在模板中定義的。

{{ 變量名 }}

在模板中編寫代碼段語法如下:

{% 代碼段 %}

更多模板語法這里就不一一敘述了。


視圖調(diào)用模板

調(diào)用模板分為三步驟:

  • 找到模板
  • 定義上下文
  • 渲染模板
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):# 從數(shù)據(jù)庫中獲取圖書信息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 效果如下圖


視圖調(diào)用模板簡寫

視圖調(diào)用模板都要執(zhí)行以上三部分,于是 Django 提供了一個函數(shù) render 封裝了以上代碼。

函數(shù) render 包含3個參數(shù):

  • 第一個參數(shù)為 request 對象
  • 第二個參數(shù)為 模板文件路徑
  • 第三個參數(shù)為 字典,表示向模板中傳遞的 上下文數(shù)據(jù)

調(diào)用 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):# 從數(shù)據(jù)庫中獲取圖書信息books = BookInfo.objects.all()# 定義上下文context = {"title": "圖書信息","books": books,}return render(request, "book/index.html", context)

公眾號

新建文件夾X

大自然用數(shù)百億年創(chuàng)造出我們現(xiàn)實世界,而程序員用幾百年創(chuàng)造出一個完全不同的虛擬世界。我們用鍵盤敲出一磚一瓦,用大腦構(gòu)建一切。人們把1000視為權(quán)威,我們反其道行之,捍衛(wèi)1024的地位。我們不是鍵盤俠,我們只是平凡世界中不凡的締造者 。

總結(jié)

以上是生活随笔為你收集整理的Django教程 —— Django模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。