今天是最後一篇Template Tags
的補充內容,有些東西可能前面有使用過,這邊可以當作再一次的複習。為避免看起來內容水分有點重,比較簡單的內容都會被塞到同一篇,沒直接跳過這些看起來簡單的內容是為了呼應系列文的初心
兩個字,我希望能將Django
的入門起點拉得越低越好。
開始測試補充篇的各種原始碼之前,我們要先建好一個用來顯示執行結果的測試網頁。這邊的測試環境跟if篇相同,如果在前面有建過類似的測試環境,則只要針對不同的地方修改就可以了。
(忘記怎麼啟動python
虛擬環境或網頁伺服器可以看前面幾篇都有提到)
members/templates
資料夾下新增一個檔案testing.html
,之後會把各種原始碼貼進去看結果。members/views.py
新增view
方法,用來處理訪問tetsing.html
的請求。
##上面都沒變所以省略...
#下面是新增的內容
def testing(request):
template = loader.get_template('testing.html')
return HttpResponse(template.render())
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') #新增這一行
]
Server
等待查看每一次貼上原始碼的結果。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上面的沒有加,實際執行會有錯誤。
Django Template Tag
的Filter
用於在實際返回變數前,先針對變數進行修改。在使用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
: 將字母轉成大寫)
可以看到我們建立的變數firstname
的Qi Xiang
被轉換成大寫的QI XIANG
。
複數個Filter
(|
)
{% with firstname='Qi Xiang' %}
<h1>Hello {{ firstname|first|lower }}, how are you?</h1>
{% endwith %}
(first
: 取出第一個物件或字串的第一個字元,lower
: 將字母轉成小寫)
可以看到我們建立的變數firstname
的Q
被取出來轉換成小寫的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頁面。