iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
Modern Web

Django 初心者之旅系列 第 25

【Day 25】Django Template Tags 補充篇(6) - Filter

  • 分享至 

  • xImage
  •  

今天是最後一篇Template Tags的補充內容,有些東西可能前面有使用過,這邊可以當作再一次的複習。為避免看起來內容水分有點重,比較簡單的內容都會被塞到同一篇,沒直接跳過這些看起來簡單的內容是為了呼應系列文的初心兩個字,我希望能將Django的入門起點拉得越低越好。

測試環境

開始測試補充篇的各種原始碼之前,我們要先建好一個用來顯示執行結果的測試網頁。這邊的測試環境跟if篇相同,如果在前面有建過類似的測試環境,則只要針對不同的地方修改就可以了。

(忘記怎麼啟動python虛擬環境或網頁伺服器可以看前面幾篇都有提到)

  1. members/templates資料夾下新增一個檔案testing.html,之後會把各種原始碼貼進去看結果。
  2. members/views.py新增view方法,用來處理訪問tetsing.html的請求。
    ##上面都沒變所以省略...
    #下面是新增的內容
    def testing(request):
      template = loader.get_template('testing.html')
      return HttpResponse(template.render())
    
  3. members/urls.py註冊到testing.html的路徑,指定用剛建立的view方法來處理對該路徑的請求。
    from django.urls import path
    from . import views
    
    urlpatterns = [
      path('', views.index, name='index'),
      path('add/', views.add, name='add'),
      path('add/addrecord/', views.addrecord, name='addrecord'),
      path('delete/<int:id>', views.delete, name='delete'),
      path('update/<int:id>', views.update, name='update'),
      path('update/updaterecord/<int:id>', views.updaterecord, name='updaterecord'),
      path('testing/', views.testing , name='testing') #新增這一行
    ]
    
  4. 啟動Server等待查看每一次貼上原始碼的結果。
  5. 把各種原始碼貼進testing.html,就能在刷新頁面後,看到相應的結果囉。
    {% with greeting=2 %}
    {% if greeting == 1 %}
      <h1>Hello</h1>
    {% elif greeting == 2 %}
      <h1>Welcome</h1>
    {% else %}
      <h1>Goodbye</h1>
    {% endif %} 
    {% endwith %} 
    

下面的例子都改用{% with %}建立變數來測試執行結果,別忘記加上{% endwith %},W3Schools上面的沒有加,實際執行會有錯誤。

Filter

Django Template TagFilter用於在實際返回變數前,先針對變數進行修改。在使用Filter的過程中,會很常看到|這個符號,可以把它想像成管道(pipe),變數經過這個管道後,會產生不同的變化,像是將字串全部轉為大寫。

Filter因為適用範圍的不同,可以再分成兩種。其中一種是直接在變數後面加上Filter符號(|)和對變數做的處理,像是{{ variable | upper }}這樣,將變數均轉換成大寫。另一種則是透過Filter Tag定義出Filter區塊及如何處理變數,針對區塊內所有的變數或內容進行處理,像是{% filter upper %}<h1>Hello everyone, how are you?</h1> {% endfilter %}這樣,將<h1></h1>間的字串轉換成大寫。

直接在變數中使用Filter

  • 單一個Filter(|)

    {% with firstname='Qi Xiang' %}
    <h1>Hello {{ firstname|upper }}, how are you?</h1>
    {% endwith %}
    

    (upper: 將字母轉成大寫)

    可以看到我們建立的變數firstnameQi Xiang被轉換成大寫的QI XIANG

  • 複數個Filter(|)

    {% with firstname='Qi Xiang' %}
    <h1>Hello {{ firstname|first|lower }}, how are you?</h1>
    {% endwith %}
    

    (first: 取出第一個物件或字串的第一個字元,lower: 將字母轉成小寫)

    可以看到我們建立的變數firstnameQ被取出來轉換成小寫的q

我會傾向於將Filter想像成一連串的方法呼叫,像是{{ firstname|first|lower }},就可以看作是firstname.first().lower()

定義出使用Filter的區塊

  • 單一個Filter(|)

    {% filter upper %}
      <h1>Hello everyone, how are you?</h1>
    {% endfilter %}
    

    Filter區塊內的所有內容都轉換成大寫。

  • 複數個Filter(|)

    {% filter upper|linenumbers %}
    Hello!
    my name is
    Emil.
    What is your name?
    {% endfilter %}
    

    (linenumbers: 顯示在區塊內的行數)

    Filter區塊內的所有內容都轉換成大寫並加上位於區塊內第幾行的數字。

    (第1、6行都是空字串)

今天的內容非常簡單,明天會介紹如何建立客製化的404頁面。


上一篇
【Day 24】 Django Template Tags 補充篇(5) - Include
下一篇
【Day 26】 Django 客製化 404 頁面
系列文
Django 初心者之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言