六、模板语言:变量,过滤器,标签等
模板语法之变量、模版之过滤器、模版之标签、自定义标签和过滤器
# 相当于print了该变量
urls.py
url(r'^index/',views.index),
views.py
fromdjango.shortcutsimportrender#Createyourviewshere.defindex(request):name='s_jun'age=20li=[1,2,'s_jun','zone']l2=[]t1=(1,2,3,'a','b','3')s2={'h','t','d','q','b','v',9,6,4,3,}dic={'name':'s_jun','age':20,'str2':[9,'a',6,'x',3]}deftest():print('test')return'returntest'print(test())#类和对像classPerson():def__init__(self,name,age):self.name=nameself.age=agedefget_name(self):returnself.name@classmethoddefcls_test(cls):return'cls'@staticmethoddefstatic_test():return'static'#模板里不支持带参数#defget_name_cs(self,ttt):#returnself.names_jun=Person('s_jun',20)zone=Person('zone',20)person_list=[s_jun,zone]person_dic={'s_jun':s_jun}#函数不能打印内存地址,但可以把它放入到列表中,再打印内存地址(了解即可,(只打印内存地址))#locals会把函数当中的变量传递给'index.html'的这个网页中去。file_size=1024importdatetimectim=datetime.datetime.now()h3='<h3>我倒</h3>'script='<script>alert(1111111111)</script>'##returnrender(request,'index.html',{'name':name})user='s_jun'returnrender(request,'index.html',locals())
templates/index.html
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>模板语言之变量</title></head><body><p>名字:{{name}}</p><p>年龄(数字类型):{{age}}</p><p>列表:{{li}}</p><p>元祖:{{t1}}</p><p>集合:{{s2}}</p><p>字典:{{dic}}</p><p>函数:{{test}}</p><p>对像:{{s_jun}}</p><p>列表里套对象:{{person_list}}</p><p>字典里套对象:{{person_dic}}</p><hr><h4>深度查询</h4><p>列表的第0个值:{{li.0}}</p><p>列表的第3个值:{{li.3}}</p><p>字典取值:{{dic.name}}</p><p>字典取列表值:{{dic.str2.2}}</p><p>对象取数据属性:{{s_jun.name}}</p><p>对象取绑定给对象的函数属性:{{s_jun.get_name}}</p><p>对象取绑定给类的函数属性:{{s_jun.cls_test}}</p><p>对象取静态方法:{{s_jun.static_test}}</p><p>把对象列表中s_jun年龄取出来:{{person_list.1.age}}</p>{#不能调有参数的方法#}<p>字符串的方法:{{name.upper}}</p><h4>模板语言之过滤器</h4>{#后面就是个python中的函数,|前面的,是函数的第一个参数,冒号后面的是第二个参数#}<p>统计字符串长度:{{name|length}}</p><p>统计列表长度:{{li|length}}</p><p>过滤器之默认值:{{l2|default:'空值'}}</p><p>过滤器之filesizeformat--1:{{443|filesizeformat}}</p><p>过滤器之filesizeformat--2:{{file_size|filesizeformat}}</p><p>过滤器之不使用date:{{ctim}}</p><p>过滤器之date:{{ctim|date:'Y-m-d'}}</p>{#前闭后开区间#}<p>过滤器之slice:{{li|slice:'2:-1'}}</p>{#支持步长#}{#<p>过滤器之slice-字符串:{{name|slice:'0:3:3'}}</p>#}{#三个起步(显示10个,加上3个...是13个)#}<p>过滤器之truncatechars:{{'sdfaasdfdfsfpyyy'|truncatechars:13}}</p>{#根据空格来显示的字段#}<p>过滤器之truncatewords:{{'夺jhkjh我kjhkllkj耻囲在dslafj'|truncatewords:5}}</p><p>过滤器之不用safe:{{h3}}</p><p>过滤器之用safe:{{h3|safe}}</p><p>过滤器之不用safe:{{script}}</p>{#<p>过滤器之用safe:{{script|safe}}</p>#}<p>过滤器之用add:{{12|add:'1'}}</p><p>过滤器之用add:{{'egon'|add:'xxx'}}</p><hr><h4>模板语言之标签</h4>{%forbarinli%}{{forloop}}<p>{{forloop.first}}--->{{forloop.counter0}}--->{{forloop.revcounter}}--->{{bar}}</p>{%endfor%}<hr>{%forbarinli%}{%foriinperson_list%}{#取出外层是第几次循环#}{{forloop.parentloop.counter}}<p>{{forloop.first}}--->{{forloop.counter0}}--->{{forloop.revcounter}}---->{{bar}}</p>{%endfor%}{%endfor%}<hr>{#*************循环的对象是空,才会走到empty,而不是对象里面的东西为空#}{%forbarindic%}<p>{{bar}}</p>{%empty%}{%endfor%}<hr>{#只循环字典的话,取到的是key值#}{%forbarindic%}<p>{{bar}}</p>{%endfor%}<hr>{#取到value的值#}{%forbarindic.values%}<p>{{bar}}</p>{%empty%}{%endfor%}<hr>{#取到key和value的值#}{%fork,vindic.items%}<p>{{k}}----->{{v}}</p>{%empty%}{%endfor%}<hr>{%ifuser%}<ahref="">退出</a>{%else%}<ahref="">登录</a><ahref="">注册</a>{%endif%}<hr>{#for循环判断如果是第一次,打印第一次,其他打印正常值#}{%forbarinli%}{%ifforloop.first%}<p>第一次的我</p>{%elifforloop.last%}<p>最后的我</p>{%else%}<p>{{bar}}</p>{%endif%}{%endfor%}<hr>{#with相当于取别名,作用:变量太长,可以简化#}{%withnameasttt%}{{ttt}}{{name}}{{user}}{%endwith%}<hr>{%withdic.li.2asttt%}{{ttt}}{{ttt}}{%endwith%}<hr>{#************for,if,with都要有结束*************#}<h4>自定义标签过滤器</h4>{%loadmytag%}{#传多个参数的话:可以:'aaa:bb:cc',也可以:传列表#}<p>{{'s_jun'|yyy:'nb'}}</p><h6>使用自定义的标签</h6><p>{%add_nb's_jun'%}</p><p>{%add_3's_jun''is''zone'%}</p><hr>{#过滤器,可以用在if判断中#}{%if's_jun'|yyy:'test'%}<p></p>{%endif%}{#标签不能用在if判断(报错)#}{#{%ifadd_nb's_jun'%}#}{##}{#{%endif%}#}</body></html>
#自定义标签过滤器 (最好重启一下django项目)
app01目录下,目录名"templatetags"必须叫这个名字
app01/templatetags/mytag.py
#第一步,导入templatefromdjango.templateimportLibrary#第二步,定义一个叫register的变量=template.Library()register=Library()#第三步@register.filter(name='yyy')defstr_add(str1,str2):#业务逻辑很复杂returnstr1+str2@register.simple_tag()defadd_nb(value):returnvalue+'nb'@register.simple_tag()defadd_3(value,value2,value3):returnvalue+value2+value3
总结:
上节回顾:(模板层)1模板之变量---{{}}-支持数字,字符串,布尔类型,列表,字典---相当于对它进行了打印-函数--->相当于加括号运行(不能传参数)-对象--->内存地址,(如果重写__str__方法,打印的就是返回的内容)2过滤器-length---计算长度-default----设默认值-filesizeformat---把数字转成文件大小格式-截断字符---最少是三-截断单词-data----格式化日期类型-add-----数字,字符串相加-slice----切片,首,尾,步长'1:-1:2'-safe-----把前端代码渲染到页面,而不是直接显示3标签-for--用法跟python一样-if--用法跟python一样-with--相当于取别名4自定义标签-1在app下创建一个模块,名字必须叫templatetags-2创建任意一个py文件,my_tags.py-3导入:fromdjango.templateimportLibrary-4注册:register=Library()-5写一个函数,用register.simple_tag(name=可以写一个别名),装饰一下-6使用(重启)-7在模板里:{%loadmy_tags%}-8{%函数名字或者别名%},传参,用空格分割5自定义过滤器-1在app下创建一个模块,名字必须叫templatetags-2创建任意一个py文件,my_tags.py-3导入:fromdjango.templateimportLibrary-4注册:register=Library()-5写一个函数,用register.filter(name=可以写一个别名),装饰一下-6使用(重启)-7在模板里:{%loadmy_tags%}-8{{函数名字或者别名}},传参,最多传两个参数{{'参数一'|过滤器名字:'参数二'}}6过滤器可以用在if判断中,标签不能
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。