日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django模板(编写html代码

發(fā)布時(shí)間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django模板(编写html代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.模板

?

  • 用于編寫html代碼,還可以嵌入模板代碼更快更方便的完成頁面開發(fā),再通過在視圖中渲染模板,將生成最終的html字符串返回給客戶端瀏覽器
  • 模版致力于表達(dá)外觀,一個(gè)視圖可以使用任意一個(gè)模板,一個(gè)模板可以供多個(gè)視圖使用

?

  • 模板包含兩部分
  • 靜態(tài)部分,包含html、css、js
  • 動(dòng)態(tài)部分,就是模板語言
  • Django處理模板分為兩個(gè)階段
  • 1.加載:根據(jù)給定的路徑找到模板文件,編譯后放在內(nèi)存中
  • 2.渲染:使用上下文數(shù)據(jù)對(duì)模板插值并返回生成的字符串
  • 為了減少開發(fā)人員重復(fù)編寫加載、渲染的代碼,Django提供了簡(jiǎn)寫函數(shù)render,用于調(diào)用模板

?

?

2.模板語言

?

變量:{{變量}}

  • 變量的作用是計(jì)算并輸出
  • 變量名必須由字母、數(shù)字、下劃線(不能以下劃線開頭)和點(diǎn)組成
  • 當(dāng)模版引擎遇到點(diǎn)如book.title,會(huì)按照下列順序解析:
  • 1.字典book['title']
  • 2.先屬性后方法,將book當(dāng)作對(duì)象,查找屬性title,如果沒有再查找方法title()
  • 3.如果是格式為book.0則解析為列表book[0]
  • 如果變量不存在則插入空字符串''
  • 在模板中調(diào)用方法時(shí)不能傳遞參數(shù)

?

標(biāo)簽:{%代碼段%}

  • for標(biāo)簽語法如下

{%for item in 列表%}
循環(huán)邏輯
{{forloop.counter}}表示當(dāng)前是第幾次循環(huán),從1開始
{%empty%}
列表為空或不存在時(shí)執(zhí)行此邏輯
{%endfor%}

  • if標(biāo)簽語法如下

{%if ...%}
邏輯1
{%elif ...%}
邏輯2
{%else%}
邏輯3
{%endif%}

  • 比較運(yùn)算符如下
  • 注意:運(yùn)算符左右兩側(cè)不能緊挨變量或常量,必須有空格

==!=、<>、<=>=

  • 布爾運(yùn)算符andornot

?

?

過濾器

  • 語法:使用管道符號(hào)|來應(yīng)用過濾器,用于進(jìn)行計(jì)算、轉(zhuǎn)換操作,可以使用在變量、標(biāo)簽中
  • 如果過濾器需要參數(shù),則使用冒號(hào):傳遞參數(shù)

變量|過濾器:參數(shù)

  • 長(zhǎng)度length,返回字符串包含字符的個(gè)數(shù),或列表、元組、字典的元素個(gè)數(shù)
  • 默認(rèn)值default,如果變量不存在時(shí)則返回默認(rèn)值

data|default:'默認(rèn)值'

  • 日期date,用于對(duì)日期類型的值進(jìn)行字符串格式化,常用的格式化字符如下
  • Y表示年,格式為4位,y表示兩位的年
  • m表示月,格式為01,02,12等
  • j表示日,格式為1,2等
  • H表示時(shí),24進(jìn)制,h表示12進(jìn)制的時(shí)
  • i表示分,為0-59
  • s表示秒,為0-59

value|date:"Ymj? H時(shí)is"

?

自定義過濾器

  • 過濾器就是python中的函數(shù),注冊(cè)后就可以在模板中當(dāng)作過濾器使用

?

  • 1.在應(yīng)用中創(chuàng)建templatetags目錄,當(dāng)前示例為”booktest/templatetags“,創(chuàng)建init文件,內(nèi)容為空

?

  • 2.在”booktest/templatetags“目錄下創(chuàng)建filters.py文件,代碼如下

#coding=utf-8
#引入注冊(cè)對(duì)象
from django.template import Library
register=Library()

#
使用裝飾器進(jìn)行注冊(cè)
@register.filter
#定義求余函數(shù)mod,將value對(duì)2求余
def mod(value):
??? return value%2

?

3.在templates/booktest/guolvqi.html中,使用自定義過濾器

  • 4.首先使用load標(biāo)簽引入模塊:{%load filters%}

?

  • 過濾器可以接收參數(shù),將booktest/templatetags/filters.py中增加mod_num函數(shù)

#使用裝飾器進(jìn)行注冊(cè)
@register.filter
#定義求余函數(shù)mod_num,將value對(duì)num求余
def mod_num(value,num):
??? return value%num

  • 說明:只能額外傳遞一個(gè)參數(shù)

?

注釋

  • 在模板中使用如下模板注釋,這段代碼不會(huì)被編譯,不會(huì)輸出到客戶端;html注釋只能注釋html內(nèi)容,不能注釋模板語言
  • 單行注釋語法如下

{#...#}

  • 注釋可以包含任何模版代碼,有效的或者無效的都可以

{# { % if foo % }bar{ % else %} #}

  • 多行注釋使用comment標(biāo)簽,語法如下

{%comment%}
...
{%endcomment%}

?

?

3.模板繼承

  • 模板繼承和類的繼承含義是一樣的,主要是為了提高代碼重用,減輕開發(fā)人員的工作量
  • 典型應(yīng)用:網(wǎng)站的頭部、尾部信息

?

父模板

  • 如果發(fā)現(xiàn)在多個(gè)模板中復(fù)制一段代碼,那就應(yīng)該把這段內(nèi)容定義到父模板中
  • 標(biāo)簽block:用于在父模板中預(yù)留區(qū)域,留給子模板填充差異性的內(nèi)容,名字不能相同
  • 為了更好的可讀性,建議給endblock標(biāo)簽寫上名字,這個(gè)名字與對(duì)應(yīng)的block名字相同
  • 父模板中也可以使用上下文中傳遞過來的數(shù)據(jù)

{%block 名稱%}
預(yù)留區(qū)域,可以編寫默認(rèn)內(nèi)容,也可以沒有默認(rèn)內(nèi)容
{%endblock?
名稱%}

子模板

  • 標(biāo)簽extends:繼承,寫在子模板文件的第一行

{% extends"父模板名稱"%}

  • 子模版不用填充父模版中的所有預(yù)留區(qū)域,如果子模版沒有填充,則使用父模版定義的默認(rèn)值
  • 填充父模板中指定名稱的預(yù)留區(qū)域

{%block 名稱%}
實(shí)際填充內(nèi)容
{{block.super}}用于獲取父模板中block的內(nèi)容
{%endblock 名稱%}

?

?

4.HTML轉(zhuǎn)義

  • 模板對(duì)上下文傳遞的字符串進(jìn)行輸出時(shí),會(huì)對(duì)以下字符自動(dòng)轉(zhuǎn)義

小于號(hào)< 轉(zhuǎn)換為&lt;
大于號(hào)> 轉(zhuǎn)換為&gt

單引號(hào)' 轉(zhuǎn)換為&#39;

雙引號(hào)" 轉(zhuǎn)換為 &quot;
與符號(hào)& 轉(zhuǎn)換為 &amp;

  • 轉(zhuǎn)義后標(biāo)記代碼不會(huì)被直接解釋執(zhí)行,而是被直接呈現(xiàn),防止客戶端通過嵌入js代碼攻擊網(wǎng)站

?

關(guān)閉轉(zhuǎn)義

  • 過濾器escape可以實(shí)現(xiàn)對(duì)變量的html轉(zhuǎn)義,默認(rèn)模板就會(huì)轉(zhuǎn)義,一般省略

{{t1|escape}}

  • 過濾器safe:禁用轉(zhuǎn)義,告訴模板這個(gè)變量是安全的,可以解釋執(zhí)行

{{data|safe}}

?

  • 標(biāo)簽autoescape:設(shè)置一段代碼都禁用轉(zhuǎn)義,接受on、off參數(shù)

{%autoescapeoff%}
...
{%endautoescape%}

?

?

5.CSRF

  • CSRF全拼為Cross Site Request Forgery,譯為跨站請(qǐng)求偽造。CSRF指攻擊者盜用了你的身份,以你的名義發(fā)送惡意請(qǐng)求。CSRF能夠做的事情包括:以你名義發(fā)送郵件,發(fā)消息,盜取你的賬號(hào),甚至于購買商品,虛擬貨幣轉(zhuǎn)賬......造成的問題包括:個(gè)人隱私泄露以及財(cái)產(chǎn)安全。
  • CSRF示意圖如下


  • 如果想防止CSRF,首先是重要的信息傳遞都采用POST方式而不是GET方式,接下來就說POST請(qǐng)求的攻擊方式以及在Django中的避免

?

  • 重要信息如金額、積分等,采用POST方式傳遞

防止CSRF兩種方式:

  • 配置/settings.py中啟用csrf中間件即可
  • 在form表單中加入標(biāo)簽csrf_token:{%csrf_token%}

總結(jié)

以上是生活随笔為你收集整理的Django模板(编写html代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。