Django模板(filter過濾器{{ }}與tag標簽{% %}應用)


 模板里面過濾器與標簽的應用

 templates模板里面的應用參考(主要應用在這里面)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定義過濾器、標簽驗證</title>
</head>
<body>
    <h1>自定義雙大括號過濾器(讓兩個字符相加)</h1>
    <!--指定加載我自定義py文件的名字-->
    {% load my_filter %}
    {{ 'yzz'|tt:'good'}}


    <hr>
    <h2>自定義標簽(求和)</h2>
    {% load my_filter %}
    {% yy 12 13 14 15 %}

{#    過濾器的應用#}
    <hr>
    <p>字符串名字:{{ name }}</p>
    <p>數字年齡:{{ age }}</p>
    <p>列表名字:{{ name_list }}</p>
    <p>查找列表中的第一個名字:{{ name_list.0 }}</p>
    <p>時間:{{ now }}</p>
    <p>時間:{{ now|date}}</p>
    <!--下面這種注釋方法,在后台也看不到-->
{#    <!--在views視圖里面沒有處理好,也可以在模板里面做過濾處理,date是個方法名-->#}
    <p>時間:{{ now|date:'Y-m-d:H:i:s'}}</p>
{#    default空列表給其默認值#}
{#    <p>default:{{ empty_list }}</p>#}
    <p>default:{{ empty_list|default:'給空列表傳值' }}</p>
    <p>default:{{ empty_dic|default:'給空字典傳值' }}</p>
{#    計算長度#}

    <p>列表長度:{{ name_list|length }}</p>  #3
    <p>字典長度:{{ name_dic|length }}</p>
{#filesizefromat將數字計算的計算轉個響應的大小例如bytes kb mb等#}
    <p>計算文件大小:{{ file|filesizeformat }}</p>

{#slice切片操作,顧頭不顧尾#}
    <p>slice切片:{{ name|slice:'1:3' }}</p> #結果為li

{#如果字符串字符多於指定的字符數量,那么會被截斷。截斷的字符串將以可翻譯的省略號序列(“...”)結尾#}
     <p>字符的截斷...:{{ str_str|truncatechars:6 }}</p> #結果為lib...(6:字符+...共6位)
     <p>單詞的截斷(以空格截斷)...:{{ str_str2|truncatewords:3 }}</p> # 這里的數字就是單單顯示幾個單詞 libai love lisi ...

{#    safe控制是否轉義和不轉義(就是跨站腳本攻擊)#}
    <p>默認是a對字符串"<a href="https://www.baidu.com">點擊</a>":{{ ss3 }}</p>
    <p>safe不讓其轉譯,會正常在頁面顯示a的鏈接:{{ ss3|safe }}</p>

{#add做加號#}
    <p>add做加號:{{add_num|add:'3' }}</p>
    <p>add做加號2:{{add_num|add:3 }}</p>
{#    <p>add做加號2:{{add_num|add:'aaa' }}</p>如果是數字和字符就會輸出空#}



    {#  標簽的應用  #}
    <h3>便簽的應用</h3>

{% for li in name_list %}

    <p>{{ li }}</p>

{% endfor %}
    <hr>
{#foorloop可以一次循環出所有的元素,並且每個元素並且每個元素也都有參數#}
{% for foo in name_list %}
    <p>{{ forloop }}</p>
    <p>{{ forloop.counter }}</p>
    <p>{{ forloop.first }}</p>
    <p>{{ forloop.last }}</p>
    {% if forloop.first %}
        第一個
        {% elif forloop.last %}
            最后一個
        {% else %}
            中間一個
    {% endif %}
{% endfor %}
    <hr>
{#empty 對於for循環的對象是個控制,默認可以用這個給於設置默認提示#}
{% for foo in empty_list %}
    {{ foo}}
    {% empty %}
    這個列表是空值,empty做提示必須放在for循環中
{% endfor %}
    <hr>

{#forloop.parentloop 列表套列表的情況#}
{% for foo in li %}
        {{ foo }}
    <hr>
        {{ forloop }}
    <hr>
    {% for i in foo %}
            {{ i }}
        <hr>
            {{ forloop }}
            {{ forloop.parentloop }} #子列表的父類表
    {% endfor %}

{% endfor %}


<br>
{# with方法取值:作用就是如果后面只比較長的時候可以明個名字,通過中間名調用取值#}
{% with n=name_dic.age %}
<P>with字典正常查值:{{ name_dic.age }}</P>
<p>with方法查詢字典值:{{ n }}</p>
{% endwith %}

{# with ...as 方法取值#}
{% with name_dic.name as aa %}
<P>with as方法查詢取值: {{ aa }}</P>
{% endwith %}


{# for循環取字典value的值#}

{% for key in name_dic.keys %}
<P>字典的key值:{{ key }}</P>

{% endfor %}

{% for value in name_dic.values %}
<p>字典的value值:{{ value }}</p>
{% endfor %}

{% for key,value in name_dic.items %}
<p>字典的value值:{{ key }}--- {{ value }}</p>
{% endfor %}
</body> </html>

 

views響應視圖里面的配套設置(輔助模板的運行)

from django.shortcuts import render,HttpResponse

# Create your views here.
class Person:
    def __init__(self,name):
        self.name=name
    @classmethod
    def calss_test(cls):
        print('Person_class method')
        render('class method')
    def test(self):
        print('method')
        return self.name


def index(request):
    name='zhangsanaaaaaaaaaaaaaa'
    age=23
    name_list=['zhangsan','lisi','wangwu']
    name_dic={'name':'yangzhizong','age':23}
    import datetime
    now = datetime.datetime.now()
    empty_list=[]
    empty_dic={''}
    file=1024
    str_str='libailovelisi'
    str_str2='libai love lisi zhangsan love who '
    ss3='<a href="https://www.baidu.com">點擊</a>'
    add_num=12
    li=[[1,2,3],[4,5,6],[7,8,9]]

    #將上面定義的逐一渲染到頁面
    # return render(request,'index.html',{'name':name,'age':age,'name_list':name_list})
    #對模板里已經調用的會一次性從上面拿到渲染進模板
    return render(request,'index.html',locals())

 

 

自定義過濾器{{ }}:

例如:自定義一個過濾器方法,完成2個字符串拼接

1.settings.py里面確認是否將自己的app文件夾添加到

INSTALLED_APPS =[  ]

2.在app目錄下面創建一個templatetags文件夾(名字固定)

3.在第二步創建的文件夾下面自己寫一個py文件,名字可以自己定義:例如my_filter

4.導入from django import template 模塊 

5.做一個注冊:register = template.Library()

6.寫函數addrstr( 並且用register.filter() 進行裝飾)

7.寫html模板

{% load my_filter %}  指定你定義的過濾器方法名 
{{ 'lqz'|tt:'isbig' }}  傳2個字符串完成拼接(最多只能拼接2個字符串)

重要備份的配置信息及截圖:
from django import template

#做一個注冊
register = template.Library()

#寫函數並且用@register.filter給自定義函數做裝飾(tt就是重命名我的過濾器方便在html里面調用)
@register.filter(name='tt')
def addrstr(x,y):
    return x+y
my_filter.py
from django import template

#做一個注冊
register = template.Library()

#寫函數並且用@register.filter給自定義函數做裝飾(tt就是重命名我的過濾器方便在html里面調用)
@register.filter(name='tt')
def addrstr(x,y):
    return x+y
index.html模板配置

截圖信息如下

 

 

自定義標簽{% %}:

1.settings.py里面確認是否將自己的app文件夾添加到

INSTALLED_APPS =[  ]

2.在app目錄下面創建一個templatetags文件夾(名字固定)

3.在第二步創建的文件夾下面自己寫一個py文件,名字可以自己定義:例如my_filter

4.導入from django import template 模塊 

5.做一個注冊:register = template.Library()

6.寫函數my_sum@register.simple_tag(name='yy')並且裝飾

  @register.simple_tag(name='yy')

  def my_sum(x,y,z,i)

  return x+y+z+i

7.html模板便簽里面的調用 

{% load my_filter %}
{% yy 12 3 17 89  %}

圖解如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM