模板里面過濾器與標簽的應用
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

from django import template
#做一個注冊
register = template.Library()
#寫函數並且用@register.filter給自定義函數做裝飾(tt就是重命名我的過濾器方便在html里面調用)
@register.filter(name='tt')
def addrstr(x,y):
return x+y
截圖信息如下
自定義標簽{% %}:
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 %}
圖解如下: