Django 2 1 7 模板語言 變量、標籤、過濾器、自定義過濾器、模板註釋

相關篇章

Django 2.1.7 建立應用模板 Django 2.1.7 配置公共靜態文件、公共模板路徑html

參考文獻

docs.djangoproject.com/zh-hans/2.1…python

模板語言

模板語言包括4種類型,分別是:django

  • 變量
  • 標籤
  • 過濾器
  • 註釋 接下來逐個介紹4種類型。

模板變量

模板變量的做用是計算並輸出,變量名必須由字母、數字、下劃線(不能如下劃線開頭)和點組成。瀏覽器

語法以下: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,用於對日期類型的值進行字符串格式化,經常使用的格式化字符以下:

  • Y表示年,格式爲4位,y表示兩位的年。
  • m表示月,格式爲01,02,12等。
  • d表示日, 格式爲01,02等。
  • j表示日,格式爲1,2等。
  • H表示時,24進制,h表示12進制的時。
  • i表示分,爲0-59。
  • s表示秒,爲0-59。
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標籤引入模塊。
{%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%}
複製代碼

相關文章
相關標籤/搜索