1. 程式人生 > >Django模板語言 標籤整理

Django模板語言 標籤整理

Django模板語言 標籤

內建標籤引用

1. autoescape

控制自動轉義是否可用. 這種標籤帶有任何 on 或 off 作為引數的話,他將決定轉義塊內效果。 該標籤會以一個endautoescape作為結束標籤.

當自動轉義生效時,所有變數內容會被轉義成HTML輸出(在所有過濾器生效後) 這等同與手動將escape篩選器應用於每個變數。

例項:

1)

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
<!-- index.html檔案 -->
<body>
    <p>{{ text }}</p>
    {% autoescape off %}
        {{ text }}
    {% endautoescape %}
</body>

如果: text = "<b>文字內容</b>"

頁面顯示結果:

<b>文字內容</b>

文字內容

2)

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
<!-- index.html檔案 -->
<body>
    <p>{{ text }}</p>
    {% autoescape off %}
        {{ text|escape }}
    {% endautoescape %}
</body>

頁面顯示結果:

<b>文字內容</b>

<b>文字內容</b>

使用了escape過濾器, 則對text文字轉義

Django轉義預設是開啟的, 關閉轉義有兩種方式

(1) safe 一般作用於單行文字

(2) autoescape off 一般作用於塊級內容

例項:

1)

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
<body>
    <p>{{ text }}</p>
    {% autoescape on %}
        {{ text }}
    {% endautoescape %}
</body>

頁面顯示結果:

<b>文字內容</b>

<b>文字內容</b>

2)

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
<body>
    <p>{{ text|safe }}</p>
    {% autoescape off %}
        {{ text }}
     {{ text|escape }}
    {% endautoescape %}
</body>

頁面顯示結果:

文字內容

文字內容

 

2. block

一般在父模板可以使用block標籤, 把變化的內容可以包裹在block標籤內; 子模板引用父模板後, 可以使用block標籤重寫內容, 覆蓋父模板中原來的內容.

例項:

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
<!-- 父模板html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>年度頁面</title>
</head>
<body>
    <div>
        <p>這是年度新聞</p>
    </div>
    {% block content %}
    <p>頁面主體內容</p>
    {% endblock content %}
</body>
</html>
<!-- 子模板一 html -->
{% extends 'show_year.html' %}
<!-- 子模板二 html -->
{% extends 'show_year.html' %}
{% block content %}
 <p>子模板中內容</p>
{% endblock %}

子模板的顯示結果:

子模板一:

這是年度新聞

頁面主題內容

子模板二:

這是年度新聞

子模板中內容

 

3. comment

在 {% comment %} 和 {% endcomment %},之間的內容會被忽略,作為註釋。相當於多行註釋

示例:

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
{% comment %}
    <b>粗體</b>
    <div>
        <p>這是Index頁面</p>
    </div>
{% endcomment %}

這部分註釋的內容, 在伺服器端就直接忽略到了, 不會發送給客戶端.

 

4. csrf_token

這個標籤用於跨站請求偽造保護.

客戶端在提交表單到服務端時, 如果表單中不寫這個標籤, 服務端會直接返回403 Forbidden的錯誤. 把這個標籤寫到表單中, 可以避免發生這個錯誤.

當把csrf_token寫到表單中後, 其實客戶端在提交資料時, 會提交一個name=csrfmiddlewaretokenvalue為隨機的64位字元給服務端, 服務端收到後, 會根據這串字元校驗客戶端的合法性.(如果想看這個csrfmiddlewaretoken的具體內容,可以開啟瀏覽器的除錯控制檯; 你會看到一個屬性type='hidden'的input標籤, value已經有預設值).

表單

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
<form action="" method="POST">
    {% csrf_token %}
    <input type="text" name="name" placeholder="姓名">
    <button type="submit">提交</button>
</form>

 

5. cycle

每當這個標籤被訪問,則傳出一個它的可迭代引數的元素。 第一次訪問返回第一個元素,第二次訪問返回第二個引數,以此類推. 一旦所有的變數都被訪問過了,就會回到最開始的地方,重複下去

例項:

1) 這個標籤在迴圈中特別有用:

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
{% for o in some_list %}
    <tr class="{% cycle 'row1' 'row2' %}">
        ...
    </tr>
{% endfor %}

第一次迭代產生的HTML引用了 row1類,第二次則是row2類,第三次 又是row1 類,如此類推。

2) 你也可以使用變數, 例如,如果你有兩個模版變數, rowvalue1rowvalue2, 你可以讓他們的值像這樣替換:

  
   
    
   
   
    
     
      
       
        
        
        
        
         
          
          
          
{% for o in some_list %}
    <tr class=