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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django从理论到实战(part19)--DTL模板语法

發布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django从理论到实战(part19)--DTL模板语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考

參考自:Django打造大型企業官網–Huang Y;官方文檔

本系列Blog以應用為主,理論基礎部分我在后端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,盡量詳細的記錄一下。


文章目錄

    • DTL模板語法
      • 變量
      • 常用標簽
        • `if`標簽
        • `for...in...`標簽
        • `for...in...empty`標簽
        • `with`標簽
        • `url`標簽
        • `spaceless`標簽
        • `autoescape`標簽
        • `verbatim`標簽



DTL模板語法


變量


模板中可以包含變量,Django在渲染模板的時候,可以傳遞變量對應的值過去進行替換。變量的命名規范和Python非常類似,只能是阿拉伯數字和英文字符以及下劃線的組合,不能出現標點符號等特殊字符,例如:

{# profile.html模板代碼 #} <p>{{ username }}</p>

模板中的變量同樣也支持點.的形式,比如person.username,模板是按照以下方式進行解析的:

  • 如果person是一個字典,那么就會查找這個字典的username這個key對應的值。

  • 如果person是一個對象,那么就會查找這個對象的username屬性,或者是username這個方法。

  • 如果出現的是person.0,則Django會判斷persons是否是一個列表或者元組或者任意的可以通過下標訪問的對象,如果是的話就取這個列表的第1個值,如果不是,獲取到的就是一個空的字符串。


常用標簽


if標簽


if標簽相當于Python中的if語句,有elif和else相對應,但是所有的標簽都需要用標簽符號({%%})進行包裹。if標簽中可以使用==、!=、<、<=、>、>=、in、not in、is、is not等判斷運算符,例如:

{% if "張三" in persons %}<p>張三</p>{% else %}<p>李四</p>{% endif %}

for...in...標簽


for...in...標簽類似于Python中的for...in...。可以遍歷列表、元組、字符串、字典等一切可以遍歷的對象,例如:

{% for person in persons %}<p>{{ person.name }}</p>{% endfor %}

如果想要反向遍歷,那么在遍歷的時候就加上一個reversed,例如:

{% for person in persons reversed %}<p>{{ person.name }}</p>{% endfor %}

在python中,需要使用items、keys和values等方法遍歷字典,在DTL中,執行上述方法的語法如下:

{% for key,value in person.items %}<p>key:{{ key }}</p><p>value:{{ value }}</p>{% endfor %}

在for循環中,DTL提供了一些變量供我們使用,詳見下表:


變量解釋
forloop.counter當前循環的下標,以1作為起始值
forloop.counter0當前循環的下標,以0作為起始值
forloop.revcounter0類似于forloop.revcounter,不同的是最后一個元素的下標是從0開始
forloop.revcounter當前循環的反向下標值,比如列表有5個元素,那么第一次遍歷這個屬性是等于5,第二次是4,以此類推。并且是以1作為最后一個元素的下標
forloop.first是否是第一次遍歷
forloop.last是否是最后一次遍歷
forloop.parentloop如果有多個循環嵌套,那么這個屬性代表的是上一級的for循環

for...in...empty標簽


該標簽使用跟for...in...是一樣的,只不過是在遍歷的對象如果沒有元素的情況下,會執行empty中的內容,例如:

{% for person in persons %}<li>{{ person }}</li>{% empty %}無元素{% endfor %}

with標簽


該標簽可以幫助我們在模版中定義變量。有時候一個變量的訪問比較復雜,那么可以先把這個變量緩存到另一個變量上,之后就可以直接使用這個變量了,例如:

#視圖模塊中 context = {"persons": ["小黃","大白"]}#模板文件中{% with lisi=persons.1 %}<p>{{ lisi }}</p>{% endwith %}

還有另外一種寫法:

{% with persons.1 as lisi %}<p>{{ lisi }}</p> {% endwith %}

需要注意的是:

  • 在with語句中定義的變量,只能在{%with%}{%endwith%}中使用,不能在這個標簽外面使用;
  • 定義變量的時候,不能在等號左右兩邊留有空格,比如,{% with lisi = persons.1%}是錯誤的。

url標簽


在模版中,我們經常要寫一些url,比如在a標簽中定義href屬性,如果我們通過硬編碼的方式直接將這個url寫死也是可以的,但是這樣對于以后項目維護可能不是一件好事,因此建議使用反轉的方式來實現,類似于django中的reverse一樣,例如:

<a href="{% url 'book:list' %}">圖書列表頁面</a>

如果url反轉的時候需要傳遞參數,那么可以通過位置參數和關鍵字參數兩種方式,注意位置參數和關鍵字參數不能同時使用,例如:

#urls.py模塊中path('detail/<book_id>/',views.book_detail,name='detail')#模板文件中 #url反轉,使用位置參數 <a href="{% url 'book:detail' 1 %}">圖書詳情頁面</a>#url反轉,使用關鍵字參數 <a href="{% url 'book:detail' book_id=1 %}">圖書詳情頁面</a>

如果需要傳遞多個參數,那么通過空格的方式進行分隔,例如:

<a href="{% url 'book:detail' book_id=1 page=2 %}">圖書詳情頁面</a>

如果想要在url標簽反轉時傳遞查詢字符串的參數,那么必須要手動在在后面添加,例如:

<a href="{% url 'book:detail' book_id=1 %}?page=1">圖書詳情頁面</a>

spaceless標簽


該標簽用于移除html標簽中的空白字符,包括空格、tab鍵、換行等,例如:

{% spaceless %}<p><a href="foo/">Foo</a></p>{% endspaceless %}

渲染完成后,頁面中的代碼會變成下面這樣:

<p><a href="foo/">Foo</a></p>

spaceless只會移除html標簽之間的空白字符,而不會移除標簽與文本之間的空白字符,例子:

{% spaceless %}<strong>Hello</strong> {% endspaceless %}

上述代碼將不會移除strong標簽中的空白字符。


autoescape標簽


該標簽可以開啟和關閉這個標簽內元素的自動轉義功能,自動轉義可以將一些特殊的字符,比如<轉義成html語法能識別的字符,比如<會被轉義成<,而>會被自動轉義成>,模板中默認是已經開啟了自動轉義的,例如:

#傳遞的上下文信息context = {"info":"<a href='www.baidu.com'>百度</a>"}#模板中關閉自動轉義{% autoescape on %}{{ info }}{% endautoescape %}

上述代碼中,會顯示百度的一個超鏈接,但是如果開啟自動轉義(off),那么就會顯示成一個普通的字符串。


verbatim標簽


在DTL模板中,默認會解析一些特殊字符,比如,{%和%}以及{{等。如果我們在某個代碼片段中不想使用DTL的解析引擎,那么可以把這個代碼片段放在verbatim標簽中,例如:

{% verbatim %}{{if dying}}Still alive.{{/if}}{% endverbatim %}

總結

以上是生活随笔為你收集整理的Django从理论到实战(part19)--DTL模板语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。