Django框架(8.Django中的模板文件的使用和模板变量的简单使用)
為什么使用模板
通過視圖可以給用戶返回一些字符串等等,
那如何向請求者返回一個漂亮的頁面呢?
肯定需要用到html、css,如果想要更炫的效果還要加入js,問題來了,這么一堆字段串全都寫到視圖中,作為HttpResponse()的參數嗎?這樣定義就太麻煩了吧,因為定義字符串是不會出任何效果和錯誤的,如果有一個專門定義前端頁面的地方就好了。
解決問題的技術來了:模板。
在Django中,將前端的內容定義在模板中,然后再把模板交給視圖調用,各種漂亮、炫酷的效果就出現了。
模板不僅僅是一個html文件
? 模板文件的使用
? 1.創建模板的文件夾
? ? ? 在項目的路徑的下面創建一個名字為templates的文件夾
? 2. 配置模板目錄
? ?(1)? ?在項目的配置文件settings.py里面,有個配置叫作? TEMPLATES (用來設置模板目錄)
? ? ? TEMPLATEs中DIRS中的列表默認是為空的列表,然后在里面設置模板文件的目錄路徑
? ?(2)? 在配置文件里面有BASE_DIR 用來獲取項目目錄的絕對路徑
import os# 項目目錄的絕對路徑 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))? ?然后使用功能BASE_DIR進行配置,使用os.path.join(BASE_DIR,"templates") 進行拼接
EMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(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',],},}, ]?使用拼接的原因是,防止項目換個目錄,而導致模板文件找不到,從而導致各種錯誤
? (3)有多個應用時,防止模板為不混淆,可以在templates下面建立,每個應用的文件夾
? ? ? ? ? ?
(4) 使用模板文件
? ? ? ?在模板文件的某個應用的模板文件下面的創建模板,即html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>booktest的模板文件</title> </head> <body><h1>這是一個模板文件</h1> </body> </html>? ? ① 加載模板文件
? ? ? ? ?去模板目錄下面獲取html文件的內容,得到一個模板對象
? ? ②定義傳遞的字典? ? ?
? ? ? ? 向模板文件傳遞數據
? ? ③模板渲染??(注意在1.11后只能傳入字典,不能傳入上下文的對象)
? ? ? ? ??得到一個標準的html內容
# Create your views here. # 1. 定義視圖函數,返回HttpRequest對象 # 2. 進行url配置,建立url地址和視圖的對應關系 def index(request):# 進行處理,和M和T進行交互..."""使用模板文件1. 加載模板文件,返回一個模板對象"""temp = loader.get_template("booktest/index.html")'''2. 給模板文件傳遞數據傳遞的數據通過字典的鍵值對形式傳遞不傳值的話可以傳一個空字典'''content = {}'''3.模板渲染:把傳遞的這些數據對應的位置替換成對應的值,最終返回替換后的內容,就是一個標準的html文件'''res_html = temp.render(content)'''4.返回給瀏覽器'''return HttpResponse(res_html)? 然后訪問? ? 127.0.0.1:8000/index? ? 就可以把模板文件進行加載然后渲染出來
? ?
(5) 因為每個視圖函數都要用相同的步驟進行,所有系統給了一個 render() 函數實現相同的功能,
? ? ? ? ? 代碼更少,而且在不同視圖函數進行調用就行
from django.shortcuts import render from django.http import HttpResponse from django.template import loader, RequestContext# Create your views here. # 1. 定義視圖函數,返回HttpRequest對象 # 2. 進行url配置,建立url地址和視圖的對應關系 def index(request):# 進行處理,和M和T進行交互..."""render(),有三個參數分別為:request,template_name,context=None第一個參數為request,當前的路徑第二為模板文件路徑第三個為數據,沒有的話可以不寫或者{},context 傳遞參數,context為一個字典"""return render(request, "booktest/index.html", {})?
?模板變量的使用
? ?1.給模板變量傳遞數據
def index(request):# 進行處理,和M和T進行交互...return render(request, "booktest/index.html", {"content":"這是一個模板變量值!"})2.???接受傳過來的數據用? {{? }}? ?里面跟上模板變量的名字
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>booktest的模板文件</title> </head> <body><h1>這是一個模板文件!</h1><div>使用模板變量:{{ content }}</div> </body> </html>然后刷新網頁? ?,值就成功傳遞過去了
3. 也可以傳遞一個列表,并且可以在模板中遍歷這個列表,
? ?在模板中使用for循環? ?代碼段寫在? {% %}? 以 {% endfor %} 在循環的結尾
在模板中編寫代碼段語法如下:
{%代碼段%}? 給模板傳遞數據?
def index(request):# 進行處理,和M和T進行交互...return render(request, "booktest/index.html",{"content":"這是一個模板變量值!","list":list(range(1,11))})在模板中接收數據,使用for循環
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>booktest的模板文件</title> </head> <body><h1>這是一個模板文件!</h1><div>使用模板變量:{{ content }} <br/>使用列表:{{ list }} <br/>對列表進行遍歷使用for循環:{% for i in list %}<li>{{ i }}</li>{% endfor %}</div> </body> </html>刷新網頁,查看效果
?靜態文件
? ? 把項目所需要的js、css、圖片、以及一些靜態的文件放到一個文件中
- 在項目的根目錄下面創建名為?static?的文件
- 在系統的settings的文件中進行配置,
應用中的apps.py(應用的配置類)
? ?name是app的名稱,表示這個配置類加載到哪個應用的,每個配置類必須包含此屬性,默認自動生成。
? ?verbose_name是后臺管理的app的顯示名稱,屬于用于設置該應用的直觀可讀的名字,此名字在django提供的Admin管理站點中會顯示
from django.apps import AppConfigclass LoginConfig(AppConfig):name = 'login'verbose_name = "登錄"?
總結
以上是生活随笔為你收集整理的Django框架(8.Django中的模板文件的使用和模板变量的简单使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django框架(7.Django中视图
- 下一篇: Pandas的学习(1.pandas的介