1. 程式人生 > >Django的基本使用(三)

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.語法

  1. . 可以用來呼叫屬性 格式: 物件名.屬性名
  2. . 可以用來呼叫方法 格式: 物件名.方法名 注意不加()
  3. 如果. 用在集合(list,tuple…)的 後面,可以連線索引, 可以獲取索引位置的值 格式: 集合.索引 相當於python的: 集合[索引]
  4. 如果 . 用在字典的後面, 可以連線 可以,可以獲取key對應的值 格式: 字典.key
    相當於python的: 字典[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.沒有填的坑,就是空內容

好處:

  1. html程式碼可以複用

  2. 可以靈活的寫內容

  3. 思想:

    1. 化整為零 ---- 將一個完整的html用block劃分成很多的小塊, 開發者只需要考慮填充對應的小模組即可…
    2. 化零為整 ---- 將多個零散的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, 路徑是從上至下匹配, 如果其中的一個沒有匹配成功則會繼續向下匹配, 如果匹配成功, 會呼叫對應的實函式

注意:

  • 匹配成功後不會繼續匹配了
  • 為了防止匹配衝突, 最好在正則的後面加上特定的字元 如: $ 結束, 最好用 /