iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
自我挑戰組

從0 到 50 初探 如何使用Django 架構出一個網站系列 第 13

Day-13 - The Django template language - Tag

  • 分享至 

  • xImage
  •  

前言

接續昨天所談的變數傳遞,今天繼續來談談Template Language的Tag。

Tag

據官方文件說明,Tag在渲染(render)時提供變數的邏輯處理,讓在渲染時能夠做一些類似python語法的邏輯判斷。
如:for loop 、 if..else等。
在開始之前我們可以先來到Built-in template tags and filters,進來之後可以看到裡面各種用法。
比較常見的用法就是基本的for loop 和 if else。

for loop

其實和python的for loop語法一樣,Django只是在寫的時候需要{%for %},且需要在for loop程式最後寫上
{% endfor %},在{% for index in iterable %}裡就可以直接呼叫context傳過來的變數來進行迭代,在執行程式有要對index進行操作,也需要將元素包在兩個大括號中{{index}}。

用法

{% for index in iterable %} 
    欲執行的程式 
{% endfor %}

範例

views.py

def second(request):
    all ={ "Name":"Peter", "list": [1,2,3,4,5,6], "dict":{"name":"Peter"}}
    return render(request, "Django_app/Second_page.html", context = all )

Second_page.html

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Tag</h1> 
    {% for item in list %}
        <h3>This for loop index: {{item}}</h3>
    {% endfor %}
</body>
</html>

https://ithelp.ithome.com.tw/upload/images/20220921/20150927KPKeFJIHxs.png
可以看到呈現的畫面就是我們對list進行迭代所跑出來的程式!

if .. else

和for loop 一樣,用python的if else語法,在程式最後也必須加上{% endif %}。在if中就可以直接呼叫傳過來的context裡的值來做if else的判斷。

用法

{% if 條件 %}
    欲執行的程式
{% endif %}

範例

我們延續剛剛的for loop,並對for loop的元素進行if else判斷。

views.py

def second(request):
    all ={ "Name":"Peter", "list": [1,2,3,4,5,6], "dict":{"name":"Peter"}}
    return render(request, "Django_app/Second_page.html", context = all )

Second_page.html

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Tag</h1> 
    {% for item in list %}
        {% if  item > 2 %}
            <p>{{item}} is more than 2</p>   
        {% elif item == 2%}
            <p>{{item}} is equal to 2</p>
        {% else %}
            <p>{{item}} is less than 2</p>  
        {% endif %}
       
    {% endfor %}
</body>
</html>

https://ithelp.ithome.com.tw/upload/images/20220921/20150927qdFpDm3zLS.png

可以看到呈現的畫面就是我們判斷跑出來的結果。
其實Template tag 只要熟悉一下語法,使用起來就會很簡單~
還有一些其他的用法也推薦大家去官方文件閱讀並練習,我把它放在參考資料裡了~
我們明天見囉!

參考資料&推薦閱讀

https://docs.djangoproject.com/en/4.1/ref/templates/builtins/#std-templatetag-for


上一篇
Day-12 -The Django template language -變數的傳遞
下一篇
Day-14 - Tags - 利用app_name 建立到其他頁面的連結
系列文
從0 到 50 初探 如何使用Django 架構出一個網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言