這篇筆記主要是關於django模組的操作
1.1配置
在工程中建立模板目錄templates,在settings.py配置檔案中修改templates配置項的dirs值:
templates =[,},]
1.2定義模組
在templates目錄中新建乙個模板檔案,如index.html
"en"
>
"utf-8"
>
title<
/title>
<
/head>
}<
/body>
<
/html>
1.3模板渲染
呼叫模板分為兩步驟:
1)找到模板 loader.get_template(模板檔案在模板目錄中的相對路徑) -> 返回模板物件
2)渲染模板 模板物件.render(context=none, request=none) -> 返回渲染後的html文字字串 context 為模板變數字典,預設值為none request 為請求物件,預設值為none
例如,定義乙個檢視
from django.shortcuts import render
defindex
(request)
: context=
return render(request,
'index.html'
,context)
1.4模板語法
1.4.1模板變數
變數名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成。
模板變數可以使python的內建型別,也可以是物件。
def
index
(request)
: context =
,'alist':[
1,2,
3,4,
5]}return render(request,
'index.html'
, context)
1.4.2模板語句
for if 比較運算子
這裡具體可以參考這位大佬的部落格,進行練習大佬部落格
跟著敲一遍就行了
1.4.3django模組中的注釋
單行注釋
多行注釋
我就是多行注釋
此外需要會的過濾器還有
語法如下:
使用管道符號|來應用過濾器,用於進行計算、轉換操作,可以使用在變數、標籤中。
如果過濾器需要引數,則使用冒號:傳遞引數。
變數|過濾器:引數
列舉幾個如下:
safe,禁用轉義,告訴模板這個變數是安全的,可以解釋執行
length,長度,返回字串包含字元的個數,或列表、元組、字典的元素個數。
default,預設值,如果變數不存在時則返回預設值。
data|default:
'預設值'
date,日期,用於對日期型別的值進行字串格式化,常用的格式化字元如下:
y表示年,格式為4位,y表示兩位的年。
m表示月,格式為01,02
,12等。
d表示日, 格式為01
,02等。
j表示日,格式為1
,2等。
h表示時,24進製,h表示12進製的時。
i表示分,為0
-59。
s表示秒,為0
-59。
value|date:
"y年m月j日 h時i分s秒"
1.5繼承模板
模板繼承和類的繼承含義是一樣的,主要是為了提高**重用,減輕開發人員的工作量。
父模板如果發現在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。標籤block:用於在父模板中預留區域,留給子模板填充差異性的內容,名字不能相同。 為了更好的可讀性,建議給endblock標籤寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的資料。
子模板標籤extends:繼承,寫在子模板檔案的第一行。子模版不用填充父模版中的所有預留區域,如果子模版沒有填充,則使用父模版定義的預設值。填充父模板中指定名稱的預留區域。
例子如下:
定義乙個顯示圖書資訊的父模組,命名為base.html
圖書資訊<
/h4>
書名:書名(請自定義)
<
/p>
% block author %
}作者名(請自定義)
<
/p>
<
/body>
<
/html>
然後建立乙個子模板,在子模板引用 base.html:
紅樓夢曹雪芹
<
/body>
<
/html>
如果需要獲取父模板中的 block 的內容,可以使用 } 變數。如果你想要在父模板 block 中新增內容而不是完全覆蓋它,它將非常有用,用 } 獲取父模板 block 內容:
[新增鏈結描述]
)紅樓夢}
<
/body>
<
/html>
給父模組新增新的內容:
紅樓夢}新增加的內容
<
/body>
<
/html>
這塊的例子參考了簡述某大佬django模組繼承例子
pip install jinja2
2.3django配置jinjia2
2.3.1在專案檔案中建立jinja2_env.py檔案
from jinja2 import environment
defenvironment
(**options)
: env = environment(
**options)
return env
2.3.2在settings.py檔案
templates =[,},]
jinja2模板的使用絕大多數和django自帶模板一樣,具體可以參考文件
django文件
2.3.4jinja2自定義過濾器
在jinja2_env.py檔案中自定義過濾器
from jinja2 import environment
defenvironment
(**options)
: env = environment(
**options)
# 2.將自定義的過濾器新增到 環境中
env.filters[
'do_listreverse'
]= do_listreverse
return env
# 1.自定義過濾器
defdo_listreverse
(li)
:if li ==
"b":
return
"哈哈"
全拼為cross site request forgery,譯為跨站請求偽造。
csrf指攻擊者盜用了你的身份,以你的名義傳送惡意請求。
包括:以你名義傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬…
造成的問題:個人隱私洩露以及財產安全。客戶端訪問伺服器時沒有同伺服器做安全驗證
django預設是開啟csrf的
模板中設定 csrf 令牌
或者<
input
type
="hidden" value=
"}">
Django框架學習筆記 九
django的orm主要有兩個功能 操作表 運算元據行 操作表 建立表 修改表 表的結構和資料型別 刪除表 運算元據行 增刪改查 建立資料庫 修改settings.py的資料庫配置,填寫資料庫的相關資訊 引入pymysql來替換mysql db django的orm不能直接連線資料庫,需要借助pym...
django學習筆記(四)
1 請求週期 url 路由 函式或類 返回字串或者模板語言?form表單提交 提交 url 函式或類中的方法 使用者 返回字串 當接受到redirect時 自動發起另外乙個請求 url ajax ajax form物件 serilize type post datatype json traditi...
Django學習筆記(四)載入靜態頁面
本次學習搭建網頁,獲取位址資料 djproject為django應用 student為django子應用 先看看如何載入靜態html的 1 我們先在manage.py同級目錄下建立乙個資料夾存放html頁面檔案,例如 2 django有個函式專門用來載入網頁模板 render to response...