Django - 模板進階使用方式

本節主要講Django模板中的循環,條件判斷,常用的標籤,過濾器的使用。
- 列表,字典,類別的實例的使用
- 循環:迭代顯示列表,字典等中的內容
- 條件判斷
判斷是否顯示該內容,比如判斷是手機訪問,還是電腦訪問,給出不一樣的代碼。 - 標籤
for,if這樣的功能都是標籤。 - 過濾器
管道符號後面的功能,比如{{ 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 在0到100之間
{% else %}
資料不在這之間
{% endif %}
判斷’XXXXXX’ 是否在一個列表變量 List 中:
{% if 'XXXXXX' in List %}
在名單中
{% endif %}
實例七,獲取當前網址,當前用戶等
獲取當前用戶
{{ request.user }}
應用範例:判斷是否登入
{% if request.user.is_authenticated %}
{{ request.user.username }},您好!
{% else %}
請登入,這裡放登入連接
{% endif %}
獲取當前網址
{{ request.path }}