Django 2.1.7 建立應用模板 Django 2.1.7 配置公共靜態文件、公共模板路徑html
docs.djangoproject.com/zh-hans/2.1…python
模板語言包括4種類型,分別是:django
模板變量的做用是計算並輸出,變量名必須由字母、數字、下劃線(不能如下劃線開頭)和點組成。瀏覽器
語法以下:bash
{{變量}}
複製代碼
如今來看看前面篇章中寫到的模板遍歷代碼以下:服務器
{% for value in info.m_query %}
<tr>
<th scope="row">{{ value.id }}</th>
<td>{{ info.server_name }}</td>
<td>{{ value.name }}</td>
<td>{{ value.port }}</td>
<td><a href="deleteMiddlewareinfo?id={{ value.id }}" class="btn btn-outline-primary">刪除</a></td>
</tr>
{% endfor %}
複製代碼
當模版引擎遇到點如info.m_query,會按照下列順序解析: 1.字典info['m_query'] 2.先屬性後方法,將info看成對象,查找屬性m_query,若是沒有再查找方法m_query() 3.若是是格式爲info.0則解析爲列表info[0]函數
若是變量不存在則插入空字符串。oop
在模板中調用方法時不能傳遞參數。ui
1)打開assetinfo/views.py文件,建立視圖temp_var。url
def temp_var(request):
dict={'title':'字典鍵值'}
# 查詢全部服務器的信息
server_list = ServerInfo.objects.all()
context={'dict':dict,'server_list':server_list}
return render(request,'assetinfo/temp_var.html',context)
複製代碼
2)打開assetinfo/urls.py文件,配置url。
urlpatterns = [
# ex:/assetinfo/temp_var
path('temp_var', views.temp_var),
...
]
複製代碼
3)修改在templates/assetinfo下建立temp_var.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
模板變量:<br/>
{{dict.title}}<br/>
{% for server in server_list %}
{{ forloop.counter }} -- {{ server.server_hostname }}<br>
{% endfor %}
</body>
</html>
複製代碼
4)運行服務器,在瀏覽器中輸入以下網址。
http://127.0.0.1:8000/assetinfo/temp_var
複製代碼
5)瀏覽效果以下圖。
語法以下:
{%代碼段%}
複製代碼
for標籤語法以下:
{%for item in 列表%}
循環邏輯
{{forloop.counter}}表示當前是第幾回循環,從1開始
{%empty%}
列表爲空或不存在時執行此邏輯
{%endfor%}
複製代碼
if標籤語法以下:
{%if ...%}
邏輯1
{%elif ...%}
邏輯2
{%else%}
邏輯3
{%endif%}
複製代碼
比較運算符以下:
注意:運算符左右兩側不能緊挨變量或常量,必須有空格。
==
!=
<
>
<=
>=
複製代碼
布爾運算符以下:
and
or
not
複製代碼
1)打開assetinfo/views.py文件,建立視圖temp_tag。
def temp_tags(request):
context={'list':ServerInfo.objects.all()}
return render(request,'assetinfo/temp_tag.html',context)
複製代碼
2)打開assetinfo/urls.py文件,配置url。
urlpatterns = [
# ex:/assetinfo/temp_tags
path('temp_tags', views.temp_tags),
]
複製代碼
3)在templates/assetinfo下建立temp_tag.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{%for item in list%}
{%if item.id <= 2%}
<li style="background-color: red;">{{item.server_hostname}}</li>
{%elif item.id <= 3%}
<li style="background-color: blue;">{{item.server_hostname}}</li>
{%else%}
<li style="background-color: green;">{{item.server_hostname}}</li>
{%endif%}
{%empty%}
<li>對不起,沒有服務器</li>
{%endfor%}
</ul>
</body>
</html>
複製代碼
4)運行服務器,在瀏覽器中輸入以下網址。
http://127.0.0.1:8000/assetinfo/temp_tags
複製代碼
瀏覽器顯示以下:
語法以下:
|
來應用過濾器,用於進行計算、轉換操做,能夠使用在變量、標籤中。:
傳遞參數。變量|過濾器:參數
複製代碼
長度length,返回字符串包含字符的個數,或列表、元組、字典的元素個數。
默認值default,若是變量不存在時則返回默認值。
data|default:'默認值'
複製代碼
日期date,用於對日期類型的值進行字符串格式化,經常使用的格式化字符以下:
value|date:"Y年m月j日 H時i分s秒"
複製代碼
1)打開assetinfo/views.py文件,建立視圖temp_filter。
def temp_filter(request):
context={'list':ServerInfo.objects.all()}
return render(request,'assetinfo/temp_filter.html',context)
複製代碼
2)打開assetinfo/urls.py文件,配置url。
urlpatterns = [
# ex:/assetinfo/temp_filter
path('temp_filter', views.temp_filter),
]
複製代碼
3)在templates/assetinfo下建立temp_filter.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{%for item in list%}
{%if item.server_hostname|length > 4%}
<li style="background-color: darkseagreen;">
{{item.server_hostname}}
---默認時間格式爲:
{{item.server_shelves_date}}
</li>
{%elif item.server_hostname|length < 2%}
<li style="background-color: cadetblue;">
{{item.server_hostname}}
---默認時間格式爲:
{{item.server_shelves_date}}
</li>
{%else%}
<li style="background-color: green;">
{{item.server_hostname}}
---格式化時間爲:
{{item.server_shelves_date|date:"Y-m-j"}}
</li>
{%endif%}
{% empty %}
<li>對不起,沒有服務器</li>
{%endfor%}
</ul>
</body>
</html>
複製代碼
4)運行服務器,在瀏覽器中輸入以下網址。
http://127.0.0.1:8000/assetinfo/temp_filter
複製代碼
過濾器就是python中的函數,註冊後就能夠在模板中看成過濾器使用,下面以求餘爲例開發一個自定義過濾器mod。
1)在應用中建立templatetags目錄,當前示例爲"assetinfo/templatetags",建立_init_文件,內容爲空。
2)在"assetinfo/templatetags"目錄下建立filters.py文件,代碼以下:
#導入Library類
from django.template import Library
#建立一個Library類對象
register=Library()
#使用裝飾器進行註冊
@register.filter
#定義求餘函數mod,將value對2求餘
def mod(value):
return value%2 == 0
複製代碼
3)在templates/assetinfo/temp_filter.html中,使用自定義過濾器。
{%load filters%}
複製代碼
{%load filters%}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{%for item in list%}
{%if item.id|mod == 1%}
<li style="background-color: darkseagreen;">
{{ item.id|mod }}
{{item.server_hostname}}
---默認時間格式爲:
{{item.server_shelves_date}}
</li>
{%else%}
<li style="background-color: #b3d4fc;">
{{ item.id|mod }}
{{item.server_hostname}}
---格式化時間爲:
{{item.server_shelves_date|date:"Y-m-j"}}
</li>
{%endif%}
{% empty %}
<li>對不起,沒有服務器</li>
{%endfor%}
</ul>
</body>
</html>
複製代碼
4)運行服務器,瀏覽效果以下:
過濾器能夠接收參數,將assetinfo/templatetags/filters.py中增長mod_num函數。
#使用裝飾器進行註冊
@register.filter
#定義求餘函數mod_num,將value對num求餘
def mod_num(value,num):
return value%num
複製代碼
5)在templates/assetinfo/temp_filter.html中修改遍歷時判斷代碼。
{%if item.id|mod_num:3 %}
複製代碼
6)運行服務器,瀏覽效果以下:
在模板中使用以下模板註釋,這段代碼不會被編譯,不會輸出到客戶端;html註釋只能註釋html內容,不能註釋模板語言。
1)單行註釋語法以下:
{#...#}
複製代碼
註釋能夠包含任何模版代碼,有效的或者無效的均可以。
{# { % if foo % }bar{ % else % } #}
複製代碼
2)多行註釋使用comment標籤,語法以下:
{%comment%}
...
{%endcomment%}
複製代碼