Django 模板語言 標簽

前言:django的模板語法基本和flask的jinja2基本一樣。下面比較一下兩個模板語法的區別。

------深度變量的查找(萬能的句點號)

在 Django 模板中遍歷復雜數據結構的關鍵是句點字符 (.)。

1.模板變量

django:{{? 變量? }}??? # 因為django只有一個context返回,全部數據都集中在一起

jinja2:{{? 對象.變量? }}

2.根據列表的下標獲取值

django:{{? 列表.0? }}

jinja2:{{? 列表[0]? }}

3.根據字典的鍵獲取字典的值

django:{{? 字典.key? }}

jinja2:{{? 字典[key]? }}或者{{? 字典.key? }}

4.for循環時取序號

django:
{% for item in 列表 %}{{forloop.counter}} <1-- 表示當前是第幾次循環,從1開始 -->{{forloop.counter0}} <!-- 表示當前是第幾次循環,從0開始 -->

{% endfor %}

jinja2:
{% for item in 列表 %}{{loop.index}} <1-- 表示當前是第幾次循環,從1開始 -->{{loop.index0}} <!-- 表示當前是第幾次循環,從0開始 -->

{% endfor %}


# for遍歷字典
{{ for key,val in dic.items}}
  {{k}} : {{v}}
{{ endfor }}
<ul>

{% for obj in list %}<li>{{ obj.name }}</li> {% endfor %} </ul>#在標簽里添加reversed來反序循環列表: {% for obj in list reversed %}...{% endfor %}#{% for %}標簽可以嵌套: {% for country in countries %}<h1>{{ country.name }}</h1><ul>{% for city in country.city_list %}<li>{{ city }}</li>{% endfor %}</ul>{% endfor %}#系統不支持中斷循環,系統也不支持continue語句,{% for %}標簽內置了一個forloop模板變量, #這個變量含有一些屬性可以提供給你一些關于循環的信息1,forloop.counter表示循環的次數,它從1開始計數,第一次循環設為1:{% for item in todo_list %}<p>{{ forloop.counter }}: {{ item }}</p>{% endfor %} 2,forloop.counter0 類似于forloop.counter,但它是從0開始計數,第一次循環設為0 3,forloop.revcounter 4,forloop.revcounter0 5,forloop.first當第一次循環時值為True,在特別情況下很有用:{% for object in objects %} {% if forloop.first %}<li class="first">{% else %}<li>{% endif %} {{ object }} </li> {% endfor %} # 富有魔力的forloop變量只能在循環中得到,當模板解析器到達{% endfor %}時forloop就消失了 # 如果你的模板context已經包含一個叫forloop的變量,Django會用{% for %}標簽替代它 # Django會在for標簽的塊中覆蓋你定義的forloop變量的值 # 在其他非循環的地方,你的forloop變量仍然可用#{% empty %} {{li }}{% for i in li %}<li>{{ forloop.counter0 }}----{{ i }}</li>{% empty %}<li>this is empty!</li>{% endfor %}# [11, 22, 33, 44, 55] # 0----11 # 1----22 # 2----33 # 3----44 # 4----55

5.列表為空時執行邏輯

django:
{% for item in 列表 %}{{forloop.counter}} {{ item }} <1-- 表示當前是第幾次循環,從1開始 -->{{forloop.counter0}} {{ item }} <!-- 表示當前是第幾次循環,從0開始 --> {% empty %} 列表為空或不存在時執行此邏輯 {% endfor %}

jinja2:無

6.if語句

{% if num >= 100 and 8 %}{% if num > 200 %}<p>num大于200</p> {% else %} <p>num大于100小于200</p> {% endif %} {% elif num < 100 %} <p>num小于100</p> {% else %} <p>num等于100</p> {% endif %} {% if %} 標簽接受and,or或者not來測試多個變量值或者否定一個給定的變量 {% if %} 標簽不允許同一標簽里同時出現and和or,否則邏輯容易產生歧義,例如下面的標簽是不合法的: {% if obj1 and obj2 or obj3 %} 
?

7.過濾器

django:變量|過濾器:參數

jinja2:變量 | 過濾器(參數)??? 常見的jinja2過濾器:https://www.cnblogs.com/chichung/p/9775099.html

django的常見幾個過濾器如下:

  • safe,禁用html轉義(顯示html標簽樣式,而不是字符串)
  • length,長度,返回字符串包含字符的個數,或列表、元組、字典的元素個數。
  • default,默認值,如果變量不存在時則返回默認值。

    data|default:'默認值'
    
  • date,日期,用于對日期類型的值進行字符串格式化,常用的格式化字符如下:

    • Y表示年,格式為4位,y表示兩位的年。
    • m表示月,格式為01,02,12等。
    • d表示日, 格式為01,02等。
    • j表示日,格式為1,2等。
    • H表示時,24進制,h表示12進制的時。
    • i表示分,為0-59。
    • s表示秒,為0-59。
    value|date:"Y年m月j日  H時i分s秒"
  • 1  add          :   給變量加上相應的值## 2  addslashes   :    給變量中的引號前加上斜線## 3 capfirst : 首字母大寫 # # 4 cut : 從字符串中移除指定的字符 # # 5 date : 格式化日期字符串 # # 6 default : 如果值是False,就替換成設置的默認值,否則就是用本來的值 # # 7 default_if_none: 如果值是None,就替換成設置的默認值,否則就使用本來的值 #實例: #value1="aBcDe" {{ value1|upper }}<br> #value2=5 {{ value2|add:3 }}<br> #value3='he llo wo r ld' {{ value3|cut:' ' }}<br> #import datetime #value4=datetime.datetime.now() {{ value4|date:'Y-m-d' }}<br> #value5=[] {{ value5|default:'空的' }}<br> #value6='<a href="#">跳轉</a>'  {{ value6 }} {% autoescape off %} {{ value6 }} {% endautoescape %} {{ value6|safe }}<br> {{ value6|striptags }} #value7='1234' {{ value7|filesizeformat }}<br> {{ value7|first }}<br> {{ value7|length }}<br> {{ value7|slice:":-1" }}<br> #value8='http://www.baidu.com/?a=1&b=3' {{ value8|urlencode }}<br> value9='hello I am yuan'

8.多行注釋

django:

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

9.對有需要的block進行重寫

django:

  • 不用重寫父模版中的所有block,如果子模版沒有重寫,則使用父模版定義的默認值。
  • 可以使用?block.super?來包含父模板的塊中定義的內容,如下

{% block 名稱 %} 子模板的內容 {{ block.super }} 顯示父模板中block的內容 {% endblock %}

{{ block.super }}——引用上級代碼塊在其基礎上進行一些修改

flask:

同樣原理,不過用的是{{? super()? }}

?

10.csrf_token

? ? ?用于生成csrf_token的標簽,用于防治跨站攻擊驗證。注意如果你在view的index里用的是render_to_response方法,不會生效

???? 其實,這里是會生成一個input標簽,和其他表單標簽一起提交給后臺的。

{% csrf_token %} 放到form中

?

11.引用路由配置地址 {% url %}

1.
urlpatterns = [url(r'^register.html$', register, name="register"), ]2.
<form action="{% url "register" %}" ><input type="text"><input type="submit"value="提交">{%csrf_token%} </form>

?

12.用更簡單的變量名替代復雜的變量名 {% with %}

{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}

?

13.{% load %}:?加載標簽庫

    {% load staticfiles %}<script src="{% static 'plugins/jquery.min.js' %}"></script>

?

14.自定義tag標簽

------a、在app中創建templatetags模塊(必須的)------b、創建任意 .py 文件,如:my_tags.pyfrom django import template
from django.utils.safestring import mark_saferegister = template.Library()   #register的名字是固定的,不可改變
@register.filter
def filter_multi(v1,v2):return  v1 * v2@register.simple_tag
def simple_tag_multi(v1,v2):return  v1 * v2@register.simple_tag
def my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result)------c、在使用自定義simple_tag和filter的html文件中導入之前創建的 my_tags.py :{% load my_tags %}------d、使用simple_tag和filter(如何調用)-------------------------------.html
{% load xxx %}   #首行# num=12
{{ num|filter_multi:2 }} #24

{{ num|filter_multi:"[22,333,4444]" }}{% simple_tag_multi 2 5 %}  參數不限,但不能放在if for語句中
{% simple_tag_multi num 5 %}------e、在settings中的INSTALLED_APPS配置當前app,不然django無法找到自定義的simple_tag.注意:filter可以用在if等語句后,simple_tag不可以{% if num|filter_multi:30 > 100 %}{{ num|filter_multi:30 }}
{% endif %}

?

?

?

CP https://www.cnblogs.com/chichung/p/9898017.html

轉載于:https://www.cnblogs.com/icemonkey/p/10506574.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248379.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電子書下載:Illustrated C# 2012 4th

下載&#xff1a;http://www.ctdisk.com/file/9015906轉載于:https://www.cnblogs.com/MaxWoods/archive/2012/08/26/2657752.html

關于83版射雕英雄傳

今天無意中看到網上一群人關于83版射雕的一些爭論.或許一些現在的年輕人不喜歡83版射雕,說那太老土了,但想想那個時代的條件,能拍出這樣的片子,是非常不錯的,而且我覺得83版射雕也是最忠于原著的,跟后來的翻版比較,雖然從畫面效果,人物服裝方面存在差距,但這都是由于歷史原因和…

ZOJ 3735 Josephina and RPG

思路&#xff1a;dp[i][j]:第i輪打完后&#xff0c;決定以j陣容打下一輪 保持原有陣容&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] * p [ j ][ s [ i ] ] 換成第i輪怪的陣容: for(int k0;k<r;k)dp[i][j]max(dp[i][j],dp[i-1][k]*p[k][s[i]]) 優化&#xff1a;用滾動數組&am…

4~20mA電流輸出芯片XTR111完整電路(轉)

源&#xff1a; 4~20mA電流輸出芯片XTR111完整電路轉載于:https://www.cnblogs.com/LittleTiger/p/10511115.html

電子書下載:Programming Microsoft LINQ in Microsoft .NET Framework 4

Book DescriptionDig into LINQ — and transform the way you work with data. With LINQ, you can query data from a variety of sources — including databases, objects, and XML files — directly from Microsoft Visual Basic or C#. Guided by data-access experts w…

原型模式 —— Java的賦值、淺克隆和深度克隆的區別

賦值 直接 &#xff0c;克隆 clone 假如說你想復制一個簡單變量。很簡單&#xff1a; int a 5; int b a; b 6;這樣 a 5, b 6 不僅僅是int類型&#xff0c;其它七種原始數據類型(boolean,char,byte,short,float,double.long)同樣適用于該類情況。 但是如果你復制的是一個…

一個醫院院長電視機壞了,拿到一個大修理店去修

一個醫院院長電視機壞了&#xff0c;拿到一個大修理店去修。修理店接待人員:“OK&#xff0c;開機費50元”醫院院長: “為什么還沒修理就要先交費”&#xff1f;修理店接待人員: “我們修理店的制度就是這樣&#xff0c;你們醫院的掛號費&#xff0c;不是沒看病之前就要交嗎”&…

[scrum]2011/9/24-----第四天

scrum 總結&#xff1a; Team member Yesterday’s Work Today’s Work Issue R X Task201&#xff1a;Active Agenda Page的重寫&#xff0c;界面設置 Task201&#xff1a;Active Agenda Page 界面的美化&#xff0c;收縮折疊&#xff0c;并添加一些動畫效果 Task 243:…

c# 前后日期設置

List<string> list new List<string>(); //根據當月 顯示前6個月 for(int i0;i<6;i) { list.add(DateTime.Now.AddMonths(i*-1).Tostring()); }轉載于:https://www.cnblogs.com/Dcz1996/p/10515429.html

jq-AJAX 初步了解

js的異步操作(1) 定時器 (2) 事件 (3) 回調 (4) ajax Ajax優點 可以局部更新網頁內容。 ajax的本質就是xmlHttpRequest對象控制臺出現三個屬性 readyState 請求的五個階段 0 1 2 3 4 responseText 返回的文件內容 Status 狀態嗎 返回的狀態信息 在__proto__有三個方法 …

ARM學習筆記7——乘法指令

ARM乘法指令完成兩個數據的乘法&#xff0c;兩個32位二進制數相乘的結果是64位的4積。 其中&#xff1a; 1、“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)鏈接形成的64位數&#xff0c;“[31:0]”只選取結果的最低有效32位 2、簡單的賦值由“&#xff1a;”表示…

《劍指offer》第四十三題(從1到n整數中1出現的次數)

// 面試題43&#xff1a;從1到n整數中1出現的次數 // 題目&#xff1a;輸入一個整數n&#xff0c;求從1到n這n個整數的十進制表示中1出現的次數。例如 // 輸入12&#xff0c;從1到12這些整數中包含1 的數字有1&#xff0c;10&#xff0c;11和12&#xff0c;1一共出現了5次。#in…

回調函數

又稱callback函數。意思是指&#xff1a;在你的程序中&#xff0c;被windows系統調用的函數。 這些函數雖然由你設計&#xff0c;但是永遠不會也不該被你調用&#xff0c;它們是為windows系統準備的。 窗口函數設計為callback形式&#xff0c;才能開放出一個接口給操作系統調用…

固態硬盤Ghost安裝Windows 10無法引導的問題

機器配置如下&#xff1a; 電腦型號 技嘉 B360M POWER 臺式電腦操作系統 Windows 10 64位 ( DirectX 12 )處理器 英特爾 Core i7-8700 3.20GHz 六核主板 技嘉 B360M POWER ( 英特爾 PCI 標準主機 CPU 橋 - CannonLake - A3…

Linux shell 內部命令與外部命令有什么區別以及怎么辨別

內部命令實際上是shell程序的一部分&#xff0c;其中包含的是一些比較簡單的linux系統命令&#xff0c;這些命令由shell程序識別并在shell程序內部完成運行&#xff0c;通常在linux系統加載運行時shell就被加載并駐留在系統內存中。內部命令是寫在bashy源碼里面的&#xff0c;其…

[轉]矩陣分解在推薦系統中的應用

矩陣分解是最近幾年比較火的算法&#xff0c;經過kddcup和netflix比賽的多人多次檢驗&#xff0c;矩陣分解可以帶來更好的結果&#xff0c;而且可以充分地考慮各種因素的影響&#xff0c;有非常好的擴展性&#xff0c;因為要考慮多種因素的綜合作用&#xff0c;往往需要構造cos…

iPhone 系統刷機

1. 下載好固件(愛思 或者 pp助手) e.g. http://jailbreak.25pp.com/gujian/ 2. 將電腦與手機連接上&#xff0c;彈出iTunes軟件即可 3. 長按手機電源鍵 關閉手機 4. 按住電源健&#xff0c;出現屏幕亮出現蘋果標志后再按住Home健 5. 屏幕黑屏時松開電源健&#xff0c;繼續按照H…

hdu4044

題意&#xff1a;給你一顆樹有n個節點&#xff0c;樹的根節點為1&#xff0c;表示為敵人的基地&#xff0c;其他葉子節點為你的基地&#xff0c;你一開始有m元&#xff0c;給你每個節點可以建造的塔的數量和塔的價格和可以照成的傷害&#xff0c;每個節點至多建立一座塔。敵人的…

RS100項目進展更新

1. 添加手機界面訪問網頁&#xff0c;畢竟PDA的屏幕大小和PC機大小不一致&#xff0c;完成了一自適應網頁&#xff0c;便于在手機上觀看實時畫面&#xff1b; 2. 此項目為一個遠程視頻監控遠程開關項目&#xff0c;遠程PC機或者手機能操作到監控端的開關&#xff0c;所以在遠程…

python os操作

1 # 常用的文件管理操作2 # https://www.cnblogs.com/dkblog/archive/2011/03/25/1995537.html3 import os4 import shutil5 6 # 切換工作目錄,默認是在當前目錄下7 # os.chdir("xx")8 9 # 當前的工作目錄 D:\pythonworkspace\py_base\cn\tele\io 10 print(os.getcw…