1. 程式人生 > >$Djangon模板層---變數 過濾器 標籤 |自定義(模板過濾器,標籤)

$Djangon模板層---變數 過濾器 標籤 |自定義(模板過濾器,標籤)

1 模版語法之變數:詳見原始碼
  -{{ 變數 }}:******重要******{#相當於print了該變數#}
  -深度查詢---->統一都用句點符 .
 
 2 模版之過濾器
  -語法:{{第一個引數|過濾器名字:第二個引數}}
  -常用過濾器:(詳細用法見原始碼)
   -length
   -default
   -slice
   -date
   -filesizeformat
   -truncatechars
   -truncatewords
   -safe
   -add
 3 模版之標籤
  -{% 標籤 %}
  -for:forloop:物件(裡面有好多東西:parentloop,last,first,counter....)忘記的話, 自己列印一下
   empty:被迴圈的物件是空,才走它
   for迴圈可以巢狀,也可以用if
  -if:
   {% if forloop.first %}
    <p>第一次的我 </p>
   {% elif forloop.last %}
    <p>最後的我 </p>
   {% else %}
    <p>{{ foo }}</p>吧
   {% endif %}
  -with:重新命名,應用在變數名過長
  ********都要有結束********
  
 4 自定義標籤和過濾器
  --***標籤不能用在if判斷,過濾器,可以用在if判斷
  -自定義過濾器
   -1 先app是不是已經在setting中註冊
   -2 在app下建立一個templatetags(****名字不能變***)的資料夾(模組)
   -3 在模組下建立一個py檔案,名字隨意:mytag.py
   -4 # 第一步,匯入template
      from django.template import Library
      # 第二步,定義一個叫register的變數=template.Library()
      register = Library()
   -5 寫一個函式,用@register.filter(name='yyy')裝飾一下(可以指定別名)
    def str_add(str1, str2): #一定要有返回值
     # 業務邏輯很複雜
     return str1 + str2
   -6 在模板裡:(新定定義的標籤,過濾器,都要重啟程式)
    -{% load mytag %}
    -{{'lqz'|str_add:'nb'}}
  -自定義標籤:
   -1-4:前4步,根過濾器的定義完全一樣
   -5 只是裝飾器不一樣
   @register.simple_tag()
    def add_nb(value):
     return value+'nb'
   -6 在模板裡:(多個引數,以空格區分)
    -{% load mytag %}
    -{% add_nb 'lqz'%}