模板里面过滤器与标签的应用
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 %}
图解如下: