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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Django模板渲染——(二)

發布時間:2023/12/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django模板渲染——(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模板標簽

模板是由HTML代碼和一些邏輯控制代碼組成的,邏輯控制代碼除了前面介紹的變量和過濾器,還要一個非常重要的模板標簽。模板標簽的語法規則是{%?tag %},模板標簽在渲染的過程中能提供任意的邏輯關系,模板標簽一般都有著與之對應的結束標簽,其標簽名為在原來的標簽名前加上end。下面介紹下一些常用的模板標簽。

  • {% if/elif/else %}

條件標簽用于判斷,可以使用and,or,not,in等等來組織你的邏輯,但不允許and和or同時出現的條件語句中。

  • {% ifequal %}、{% ifnotequal %}

比較是否相等,只限于簡單的類型,比如字符串、整數、小數的比較,列表、字典、元組不支持。

  • {% ifchanged %}

檢查一個值是否在上一次的迭代中改變,也可以配合else來寫入未改變所執行的語句。

  • (% for in %}

跟python的for循環用法是一樣的,但不同的是模板中的for循環的迭代次數不能靠下標來獲取,只能通過循環參數來獲取,下圖是一些常用的循環參數。

  • {% for ... %} {% empty %}

for ... empty用于在for循環取到空值時再執行empty內的語句。

  • {% load ... %}

load用于加載第三方標簽,常用于靜態文件的引用中,如{% load static %}。

  • {% url ‘name' %}

url標簽是通過name來引入路由配置的地址,返回url的絕對路徑,還可在name空格后面添加參數。

  • {% with 變量名?as? 別名 %}

用更簡單的變量名緩存復制的變量名。

  • {% autoescape off %}

這個標簽用于關閉自動轉義,類似于過濾器safe。

  • {% comment %}?

comment用于多行注釋標簽,要注意的是comment標簽不能嵌套使用。{#? #}用于單行注釋

  • {% block? ’content' %}

block標簽可以被子模板覆蓋.查看,這里的content是名稱,在下面介紹模板繼承時會用到這里。

  • {% extend 模板路徑 %}

extend用來指定當前模板是繼承自哪個模板的。

  • {% cycle 元素1 元素2 ...?%}

cycle標簽常用在for循環中,每當這個標簽被訪問,則傳出一個它的可迭代參數的元素。第一次訪問返回第一個元素,第二次訪問返回第二個參數,以此類推.一旦所有的變量都被訪問過了,就會回到最開始的地方,重復下去。

傳遞一個模板變量li = [1,2,3,4]給for循環,迭代四次cycle標簽,效果如下。

{% for i in li %} 這是第{{ i }}次迭代: {% cycle 'sky' 'run' 'water' %} <br>{% endfor %} 這是第1次迭代: sky 這是第2次迭代: run 這是第3次迭代: water 這是第4次迭代: sky

元素不僅可以是自己寫的字符串,還可以是模板變量。下面傳遞三個模板變量給cycle標簽。

{% for i in li %}這是第{{ i }}次迭代: {% cycle tel sex li %} <br>{% endfor %} 這是第1次迭代: 12580 這是第2次迭代: girl 這是第3次迭代: [1, 2, 3, 4] 這是第4次迭代: 12580

被包含在cycle中的變量將會被自動轉義,從而使包含在變量中的標簽對失效。若傳遞'b':'<b> hello world </b>','i':'<i>i am well </i>', 如下所示:

{% for j in li %}這是第{{ j }}次迭代: {% cycle b i %} <br>{% endfor %} 這是第1次迭代: <b> hello world </b> 這是第2次迭代: <i>i am well </i> 這是第3次迭代: <b> hello world </b> 這是第4次迭代: <i>i am well </i>

我們可以通過autoescape標簽來關閉自動轉義,如下所示:

{% for j in li %}這是第{{ j }}次迭代:{% autoescape off %} {% cycle b i %} {% endautoescape %}<br>{% endfor %}

我們也可以連續引用一個當前循環的值,要達到這個目的,只需使用“as”來給{% cycle %}一個別名,當要再次引用當前循環值時只需輸入其別名即可。當要進入下一循環值可cycle一次別名即可。

如果你只是想要聲明cycle,但是不產生第一個值,你可以添加一個silent關鍵字來作為cycle標簽的最后一個關鍵字。

{% cycle 'sky' 'run' 'water' as huge silent %} <br> {% for i in li %}這是第{{ i }}次迭代: <br>別名的變量是:{{ huge }} <br>{% cycle huge %} <br>{% endfor %} 這是第1次迭代: 別名的變量是:sky 這是第2次迭代: 別名的變量是:run 這是第3次迭代: 別名的變量是:water 這是第4次迭代: 別名的變量是:sky

模板繼承和引用

往往一個網站的不同網頁都有著許多相同或相似的地方,模板的繼承可以讓你創建一個基本的骨架模板,然后使其他模板可以繼承它。一個模板要想能被其他模板所繼承,那么對于繼承的部分就要使用block標簽來囊括。對于子模版來說,繼承其他模板的標簽是extend,{% extend 模板路徑 %},該標簽必須是模板中第一個出現的標簽,類似于python導包,一般都是放在首行。

子模版對于父模板中的block標簽內的內容,即可繼承,也可以自己修改。說到底,子模板的繼承其實就是?替換掉?父模板中同名的block塊,其余沒有被替換掉的就被子模板原封不動的繼承了下來。這里要注意的是,block中,前面的百分號的后面需要有空格,后面的百分號前面需要有空格。必須按格式來,否則模板引擎會識別不了 。

在子模版中,在其對應的block中,不僅可以修改從父模板繼承下來的內容,也可以在修改后的基礎上,利用block.super變量再次提取父模板的這塊內容。在子模版的block中,不僅可以自己修改內容或提取父模板的內容,還可以引用其他模板的內容,引用的標簽是include

這里要注意的是,子模板中的所有內容,必須出現在父模板定義好的block中,否則django將不會渲染。

下面是子模版的代碼

{% extends 'book/test.html' %}{% block content %} 這是子模版的主頁 <br>這里再調用父模板的內容:{{ block.super }} {% endblock %} {% block xxx %} {% include 'book/imp.html' %} {% endblock %}

下面分別是父模板和被引用模板的代碼

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title> {% block title %}主頁面{% endblock %}</title><style>* {padding: 0;margin: 0;background-color:white;}div {width:200px;background-color: palegreen;}</style> </head> <body> {% block content %}<p>這是一個書店主頁</p> {% endblock %} <div>{% block text %} 這是所有頁面都有的部分 {% endblock %} </div> {% block xxx %} <i>這是演示部分</i>{% endblock %} </body> </html> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>xxx</title><style>* {padding: 0;margin: 0;}</style> </head> <body> 這是被引用的部分</body> </html>

子模版渲染效果如下:

靜態文件引用

靜態文件一般指的就是js文件、css文件、存放圖片的image等,首先我們可以在項目下創建一個static目錄,再在其下分別創建三個子目錄,分別是css、js、image。然后在settings文件下進行配置,添加一個STATICFILES_DIRS 設置靜態文件目錄路徑,同templates。

引用靜態文件,選加載靜態文件的目錄static,使用load標簽。然后對于js文件引用及css和圖片的引用于前端是一樣的,只是在輸入文件路徑時用static標簽來引入。下面是一個小例子。

轉載于:https://www.cnblogs.com/longwhite/p/10397673.html

總結

以上是生活随笔為你收集整理的Django模板渲染——(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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