Django的基本使用(三)
一、templates用來放置模板檔案
1.templates 該目錄本身沒有,如果我們需要使用,需要我們自己建立,該目錄名通常為templates
2.建立位置
1.直接在應用下建立該目錄,應用下的html模板,能直接在應用下的views中使用,一般也只給自己的應用使用
2.直接在專案下建立該目錄,在專案下建立的改目錄,所有的應用中的views都可以方便的使用
3.若果是專案下的templates目錄,需要配置才可以使用 配置:(1)在setting的TEMPLATES中配置
'DIRS': [os.path.join(BASE_DIR,'templates')],
(2)專案不能識別templates為模板目錄,需要將該目錄標記成模板目錄才可以使用 標記: templates目錄右鍵 ---- mark Directory as ---- template Folder 看到目錄變成紫色即可
4,如果遇到template不能識別,重新做以上操作
二、模板語法
1.變數
1.變數通常在views中定義,然後傳遞給模板,模板中直接使用就可以 2.使用的語法: {{ 變數名 }} 用兩個{ 括起來 3.注意: 如果模板板中的變數沒有定義就使用了, 模板不會報錯,當作空使用
2.語法
.
可以用來呼叫屬性 格式:物件名.屬性名
.
可以用來呼叫方法 格式:物件名.方法名
注意不加()- 如果
.
用在集合(list,tuple…)的 後面,可以連線索引, 可以獲取索引位置的值 格式:集合.索引
相當於python的: 集合[索引] - 如果 . 用在字典的後面, 可以連線 可以,可以獲取key對應的值
格式:
字典.key
三、for 迴圈 注意: 有結束標籤 {% endfor %}
1.格式1:
{% for 變數名 in 集合名 %} 迴圈體 {% endfor %}
2.格式2:
{% for 變數名 in 集合名 %}
迴圈體
{% empty %}
如果集合為空,應該顯示的內容
{% endfor %}
3.forloop 迴圈的技術器
forloop.counter 從1開始計數 forloop.counter0 從0開始計數 forloop.first 是否是第一個資料 forloop.last 是否是最後一個數據 forloop.revcounter 從1開始計數, 倒著計數,即最大數是第一個 forloop.revcounter0 從0開始計數, 倒著計數,即最大數是第一個
四、判斷語句
1.格式1:
{% if 判斷表示式 %}
{% endif %}
2.格式2:
{% if 判斷表示式 %}
如果滿足條件就執行表示式1
{% else %}
否則執行表示式2
{% endif %}
3.格式3:
{% if 判斷表示式1 %}
如果滿足條件1就執行表示式1
{% elif 判斷表示式2 %}
如果滿足條件2就執行表示式2
{% else %}
否則執行表示式3
{% endif %}
4.格式4: 判斷2個值是否相等
{% ifequal valu1 value2 %}
如果value1 等於value2執行表示式
{% endifequal %}
注意: 當value1與value2值相等,且型別也一樣的時候才成立
5.格式5: 判斷2個值是否不相等
{% ifnotequal valu1 value2 %}
如果value1 等於value2執行表示式
{% endifnotequal %}
6.比較運算子
>
>=
<=
==
!=
**表示範圍的語法結果一般有結束標籤,一般是{% 括弧
五、註釋
{# 這是模板語法中的單行註釋 快捷鍵: ctrl + / #}
{% comment %}
這是多行註釋 快捷鍵: ctrl + shift + /
{% endcomment %}
<!-- 這是HTML的註釋 -->
六、其他
1.加法/減法運算
加法: 格式: {{ value|add:值 }} value + 值
加法: 格式: {{ value|add:-值 }} value - 值
2.乘法/除法運算
格式: {% widthratio value 分母 分子 %}
相當於 value * 分子/分母
除法 {% widthratio value 分母 1 %}
乘法 {% widthratio value 1 分子 %}
3.是否整除某個數
格式:{{ value|divisibleby:值 }} value是否能整除 值
需求:隔行換色
{% if forloop.counter0|divisibleby:2 %}
4.大小寫轉換
轉換成小寫:{{ value|lower }}
轉換成大寫:{{ value|upper }}
5.字串拼接
字串拼接: {{ 集合|join:"拼接的字元" }}
七、轉意字元
預設情況下,如果views檢視函式傳遞給模板的是一個 html格式的字串, 預設模板中html標籤不會生效,而有時候需要html標籤生效
1.使得標籤生效:
1. 在模板中 使用{{ 變數|safe }}
是得變數的字串中的html標籤生效
2. 使用 autoescape
不生效的HTML字串
{% autoescape on %}
{#這裡面的內容就是不生效的HTML字串#}
{{ strHtml }}
{% endautoescape %}
可以生效的HTML字串
{% autoescape off %}
{# 這裡面的內容就是可以生效的HTML字串#}
{{ strHtml }}
{% endautoescape %}
八、模板的繼承
—— 子模板可以繼承一個父模板,即可以繼承父模板的css,html,js
1.如何繼承:
1.定義一個父模板base.html, 通常在父模板寫一些通用的功能
2.定義一個字模板index.html,在子模板的首行寫 {% extends '父模板路基' %}
既可以繼承父模板中的所有的css.html.js
2.在繼承中可以block來在父模板中挖坑,挖坑可以給子類內容設定一個預留位置,方便子類在對應的位置填充內容
1.在父類中挖坑
在需要填充子模板內容的地方 寫上 :
{% block 坑的名字 %}
{% endblock %}
2.在子模板中填坑
{% block 坑的名字 %}
填充的內容
{% endblock %}
3.第一次表示是挖坑
第二次表示填坑 第3-n次會覆蓋之前的坑
4.如果填坑的時候,希望保留父模板的內容,可以在 填坑的首行加上 {{ block.super }}
{% block head %}
{#保留父模板的內容 #}
{{ block.super }}
<h1>這是三級頭</h1>
{% endblock %}
5.可以挖多個坑
6.填坑的時候不需要按照順序
7.沒有填的坑,就是空內容
好處:
-
html程式碼可以複用
-
可以靈活的寫內容
-
思想:
- 化整為零 ---- 將一個完整的html用block劃分成很多的小塊, 開發者只需要考慮填充對應的小模組即可…
- 化零為整 ---- 將多個零散的html用 include在一個html中包含進來, 可以拼接成一個完整的html
{# 將零散的html 拼接成一個完整的html #}
{% include 'head.html' %}
{% include 'bannar.html' %}
{% include 'foot.html' %}
九、模板的簡單載入原理
# 模板的載入過程
def loadTem(request):
# 1.先將模板載入到views函式中
template = loader.get_template("loadTem.html")
# 2.把資料給模板,並轉換成html形式的字串
htmlData = template.render(context={"content":"內容xxxxxx"})
# 3.把資料作為相應體,給客戶端 html本質就是字串
return HttpResponse(htmlData)
# return render(request,"loadTem.html",context={"content":"內容"})
url — 路由, 根據url地址分配檢視函式來處理不同的請求
1.urls分離
2.django中urls的匹配規則
url(正則表示式,檢視函式)
1.遵從python中正則表示式的匹配規則,按照正則匹配成功後,會呼叫對應的檢視函式
2.在django的urls中會有很多個url, 路徑是從上至下匹配, 如果其中的一個沒有匹配成功則會繼續向下匹配, 如果匹配成功, 會呼叫對應的實函式
注意:
- 匹配成功後不會繼續匹配了
- 為了防止匹配衝突, 最好在正則的後面加上特定的字元
如:
$
結束, 最好用/