Django - 模板進階使用方式

本節主要講Django模板中的循環,條件判斷,常用的標籤,過濾器的使用。
  1. 列表,字典,類別的實例的使用
  2. 循環:迭代顯示列表,字典等中的內容
  3. 條件判斷
    判斷是否顯示該內容,比如判斷是手機訪問,還是電腦訪問,給出不一樣的代碼。
  4. 標籤
    for,if這樣的功能都是標籤。
  5. 過濾器
    管道符號後面的功能,比如{{ var | length }},求變量長度的length就是一個過濾器。

實例一,字串

# -*- coding: utf-8 -*-
from django.shortcuts import render
 
 
def home(request):
    mystr = u"哈囉"
    return render(request, 'home.html', {'mystr': mystr})
在視圖中我們傳遞了一個字符串名稱是string 到模板home.html,在模板中這樣使用它:
home.html
{{ mystr }}

實例二,List

def home (request):
  ClassList=["Java","PHP","Python","Django"]
  return render(request,'home.html',{'ClassList':ClassList})
home.html
列表:
{% for i in ClassList %}
{{ i }}
{% endfor %}

小提示:

一般的變量之類的用 {{ }}(變量),
功能類的,比如循環,條件判斷是用 {% %}(標籤)

實例三,字典

def home(request):
    info_dict = {'site': u'KT Lollipop', 'content': u'線上開放式課程'}
    return render(request, 'home.html', {'info_dict': info_dict})
home.html
站點:{{ info_dict.site }} 内容:{{ info_dict.content }}
也可以這樣遍歷字典:
{% for key, value in info_dict.items %}
    {{ key }}: {{ value }}
{% endfor %}

實例四,更多 for 操作:

def home(request):
    # 0~99的 List
    List = map(str, range(100))
    return render(request, 'home.html', {'List': List})
結果:
遍歷到了最後一個逗點
所以加入forloop.last 判斷,最後一項不加入逗號
{% for item in List %}
    {{ item }}{% if not forloop.last %},{% endif %} 
{% endfor %}
for循環常用功能:
變量描述
forloop.counter索引從1 開始算
forloop.counter0索引從0 開始算
forloop.revcounter索引從最大長度到 1
forloop.revcounter0索引從最大長度到 0
forloop.first當遍歷的元素為第一項時為真
forloop.last當遍歷的元素為最後一項時為真 |
forloop.parentloop用在嵌套的for 循環中,獲取上一層for 循環的forloop

for 迴圈當列表為空值時用 empty

    {% for athlete in athlete_list %}
  • {{ athlete.name }}
  • {% empty %}
  • 資料為空
  • {% endfor %}

實例五,模板獲取 view 對應的網址:

def add(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))
urlpatterns = patterns('',
    url(r'^add/(\d+)/(\d+)/$', 'app.views.add', name='add'),
)
template html
{% url 'add' 4 5 %}
這樣網址上就會顯示出:/add/4/5/ 這個網址,
假如我們以後修改 urls.py 中的
r'^add/(\d+)/(\d+)/$'
#改成
r'^ktshow/(\d+)/(\d+)/$'
網址則會變成/ktshow/4/5/

實例六,模板中的邏輯操作

{% if var >= 90 %}
成绩高於 90 分,評等:A
{% elif var >= 80 %}
成绩高於 80 分,評等:B
{% elif var >= 70 %}
成绩高於 70 分,評等:C
{% elif var >= 60 %}
成绩高於 60 分,評等:D
{% else %}
成绩低於 60 分,評等:F
{% endif %}
and, or, not, in, not in 也可以在模板中使用
{% if num <= 100 and num >= 0 %}
num 在0100之間
{% else %}
資料不在這之間
{% endif %}
判斷’XXXXXX’ 是否在一個列表變量 List 中:
{% if 'XXXXXX' in List %}
在名單中
{% endif %}

實例七,獲取當前網址,當前用戶等

獲取當前用戶

{{ request.user }}
應用範例:判斷是否登入
{% if request.user.is_authenticated %}
    {{ request.user.username }},您好!
{% else %}
    請登入,這裡放登入連接
{% endif %}

獲取當前網址

{{ request.path }}

參考資料

這個網誌中的熱門文章

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

2023 最新 Android 教學【開發 Android APP 手機應用程式:使用 kotlin 程式語言】教學課程目錄 (Android Kotlin, Android Studio, Android APP 開發教學)

2022 最新入門零基礎 Flutter教學 【Flutter 程式設計入門實戰 30 天】Flutter 教學課程目錄 (IntelliJ IDEA 開發教學)

nano 文字編輯器