模板變量,過濾器和靜態文件引用
模板路徑
- Djiango先到settings里面找templates下的DIRS查看是否有路徑,也是從上往下依次尋找,找到就返回。
- 如果DIRS沒有,就到APP_DIRS里面尋找。但是APP要先在INSTALLED_APPS里面進行注冊然后根據INSTALLED_APPS里面從上往下順序依次尋找。
模板變量
- 動態頁面:隨時間改變會改變相應數據內容等(并不是JS就是動態頁面)
靜態頁面:反之
語法:{{變量名}},變量名命名規則和py變量一樣,但是卻不能以下劃線_開頭;注意避免關鍵字。
例如編寫顯示時間:
from datetime import datetimedef index(request):now = datetime.now()return render(request,'teacher/index.html',context={'now' : now})#HTML
<p>當前時間是:{{now}}</p>
#注意,倆個大括號里面的now對應的是context里的key的now
此時顯示的時間并不是北京時間,要進行修改。
到項目目錄下的settings里面最下面的TIME_ZONE = 'UTC'
進行修改
改為TIME_ZONE = 'Asia/Shanghai'
(不要問我為什么不是Beijing,改成Beijing會報錯,畢竟上海比較有名吧,估計是歷史原因)
修改之后:
關于模板變量的解析
- 列表list
lt = [0,1,2]return render(request,'teacher/index.html',context={'lt':lt})#HTML
<p>傳遞的列表是:{{ lt }}</p>
<p>列表下標是1的元素是:{{ lt.1 }}</p>
說明:
傳遞列表的時候獲取某個元素要使用list_name.索引的形式進行獲取
結果如圖:
- 字典
dt = {'name' : '小明','age' : 1}return render(request,'teacher/index.html',context={'dt':dt})#HTML
<p>傳遞的字典是:{{ dt }}</p>
<p>傳遞的字典['name']是:{{ dt.name }}</p>
說明:同樣是通過dt_name.key的形式獲取某個value
結果如圖:
- 函數
def func():return 'Hello world'return render(request,'teacher/index.html',context={'func':func})#HTML
<p>傳遞的func是:{{ func }}</p>
說明:
函數不能設置有參數,只能設置無參數函數。因為在解析的時候解析的是變量名,而變量名是不可以攜帶變量的。
結果如圖:
變量解析規則
- 當模板引擎遇到了變量時,會計算該變量,并以結果替換之
- 當模板引擎遇到了變量時,按照以下順序嘗試查找:
- 字典鍵值查找
- 屬性或方法查找
- 數字索引查找
- 如果結果是一個可調用的(callabled),則調用他,結果為模板變量的值
解釋:
- 如果ret = 1+1,的時候,解析出來的結果會用2代替1+1
- 字典.方法名,會解析出來方法的返回值;但是如果字典里面含有和方法重名的key的時候,會按照順序,解析為所對應的value
- 調用函數
常用的過濾器
現在先介紹內置過濾器(自定義以后聊)
過濾器:
- 語法:{{fruits|lower}}
- 作用: 對變量進行過濾。在真正渲染出來之前,過濾器會根據功能處理好變量,然后得出結果后再替換掉原來的變量展示出來。
- 管道符號進行鏈式調用,比如實現一個功能,先把所有字符變成小寫,把第一個字符轉換成大寫。{{fruits|lower|capfirst|..|..}
- 使用參數:過濾器可以使用參數,在過濾器名稱后面使用冒號”:”再加上參數,比如要把一個字符串中所有的空格去掉,則可以使用cut過濾器,{{fruits|cut:" "}}
語法:{{變量名|過濾器}}
例如:
- 時間的:{{name|date:"D d M Y"}}
- 列表的:
- name|add:數字
- name|first/last
- name|slice:"num:num"
注意:不要習慣性在冒號倆邊加上空格,會報錯
常用的過濾器:
date和time過濾器格式:
靜態文件的引用
路徑設置
靜態文件由內建APP'django.contrib.staticfiles'管理,調試用到,實際使用不會用到
django.contrib.staticfiles這個app被包含在INSTALL_APPS中
配置語法:
#setting.py
STATICFILES_DIRS = []
步驟:
- 在項目根目錄下創建一個static,注意要分APP文件夾
- 寫入
STATIC_URL = '/static/'
(默認就有) - 在settings最下面加入
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
靜態文件引用
{% load static %}#寫在模板頂部#導入的時候
src = "{% static 'app_name/img/name.jpg' %}"
如此類推