那么首先来说明下什么时Filter什么时tag了,如何去区分了 1、在使用上区别: filter使用方法{{objfilter:param}} tag使用方法{tags} 2、filter可以使用作为if判断语句的标签,标签时不可以的 3、filter最多只能传递两个参数,而且tag可以传递多个 filter使用说明 语法的格式如下 {{objfilter:param}} obj我们需要处理的对象 filter我们的filter,常见有如下罗列出的 paramfilter的参数 1、add 添加相应的值,这个比较好理解,例如: {{3add:2}}那么这个就是32最后结果等于5,当然了我们的3一般时python传过来的变量了。 注意前面的obj只能时整形数值,字符串无法相加 ageadd:3 2、addslashes 给变量中的引号前加上斜线,就是转译引号, 例如: {{qmmdfaddslashes}} 那么该输出接入如下 qmmdf 3、capfirst 首字目大写,很好理解不多说 例如: {{qmmdfcapfirst}} 那么输出结果如下: Qmmdf 4、cut 把指定的字符串剪切掉 例如我们把单引号去掉: {{qmmdfcut:}} 输出如下: Qmmdf 5、date 格式化时间日期显示,注意了,需要处理的对象必须时时间对象类型 例如: dt变量类容为:{{dt}} 处理后的内容:{{dtdate:Ymd}} 输出结果如下: dt变量类容为:April6,2018,1:07p。m。 处理后的内容:20180406 6、default 如果值是False,就替换成设置的默认值,否则就是用本来的值 例如: {{Falsedefault:这是False}} {{Truedefault:这是True}} 输出结果如下: 这是False True 7、defaultifnone 如果值是None,就替换成设置的默认值,否则就使用本来的值,和default差不多原理 例如: {{Nonedefaultifnone:没有值默认替换}} {{defaultifnone:就算有一个空格也是不会替换的}} 输入结果如下: 没有值默认替换 8、filesizeformat 对数字进行格式化,IT中经常使用到的容量显示技术 例如: {{5120filesizeformat}} 结果就是 5。0KB 9、first、last、slice 字符串处理,first取第一个字符,last去最后一个字符,slice切片和python中一样使用 例如: {{5120last}} {{5120first}} {{5120slice::2}} 结果: 0hr5hr51hr10、safe、autoescape、striptags 让浏览器渲染我们的变量内容, 例如: 原始变量:{{dt}} 有时候我们想浏览器去渲染我们在数据库等地方取出来的html语言: 第一种方法,也是最常用的,使用safe: {{dtsafe}} 第二种方法,使用autoescapeoff,注意了autoescape就是标签了: {autoescapeoff} {{dt}} {endautoescape} 第三种方法,使用striptags,注意该方法,会去除html语言标记哦: {{dtstriptags}} 效果如下: 当然还有很多的filter,以上罗列出来的只是我们常用的,更多的filter请查看官方文档 https:docs。djangoproject。comen2。0reftemplatesbuiltins 一般常用的标签tag说明: 1、最常用的if标签{if} {if条件表达式} 表达式成立执行代码块 {elif条件表达式} 表达式成立执行代码块 {else} 所有表达式不成立执行代码块 {endif} 2、循环标签{for}的使用 {forobjectinobjects} 执行的循环体 {endfor} 3、{csrftoken}跨站攻击校验 请求网页时会生成一个csrf校验字符串,防止跨站请求工具,注意如果我们使用rendertoresponse方法,这个就不生效。 使用方法,在from表单中直接使用{csrftoken} 在前台我们每次请求,会随机生产一个校验码,在表单提交时后台会进行校验 4、{url}链接url 显示指定路由的URL路径,具体查看上面的两个截图,我们需要在url路由指定name,前面进行调用 5、{with}变量替换 例如把一个长的变量做一个短的别名 {withtotalwww。qnjslm。com} {{total}} {endwith} 6、{verbatim}:禁止进行渲染 有时候我们需要在页面上显示模板语言的原型,就会用到verbatim,还记得上面的safe的filter {verbatim} {{123add:2}} {endverbatim} 7、{load}加载标签库 我们使用最多的就是加载自定义标签库了,产靠下一节的演示 现在来介绍我们自定义Tag以及Filter 第一步:在APP目录下创建一个模块名字为templatetags(注意名字必须时这个) 第二步:在templatetags目录下创建py文件,这个文件名字可以随意了 第三步:创建我们自定义的filter以及tag 1、首先需要引用template,如果需要返回html内容需要引入marksafe fromdjangoimporttemplate fromdjango。utils。safestringimportmarksafe 2、实例化一个对象,注意这里必须使用register来接收,不可以使用其他名称 registertemplate。Library() 3、定义自已的函数,使用装饰器register。filter、register。simpletag 4、在Django的设置中,在APP中一定加载我们的APP名称 5、在模板中我们使用load加载我们的文件名,就可以安装上面的方法进行使用 {loadmytest} 详细代码(mytest): fromdjangoimporttemplate fromdjango。utils。safestringimportmarksafe registertemplate。Library() register。filter deffiltermulti(v1,v2): returnv1v2 register。simpletag deftagmulti(v1,v2,v3): returnv1v2v3 register。simpletag definputmulti(id,name,classname): result(id,classname,name) returnmarksafe(result) 模板中我们使用 前台的效果如下图 模板的标签(Tags): 标签的使用:{Tags} autoescape 自动转义标签,要在html中原样输出html标签的时候使用 {autoescapeon} {{body}} {endautoescape} 对body的内容进行转义,原样输出html标签 block 模板继承,详细看模板继承 comment 多行注解,忽略、不输出{comment}{endcommit}标签里面的内容 csrftoken 防止跨站点攻击,在表单标签中添加{csrftoken} cycle 用于循环产生字段 {foroinsomelist} {cycleonetwo} {endfor} 这将会在for循环中交替出现row1和row2字符串 结果为(somelist的长度为5): one two one two one cycle的参数可以为字符串或者为变量 {cycleonetwoasstr}{{str}} 可以在循环中多次引用字符串 结果为: oneone twotwo oneone twotwo oneone debug 输出整个调试信息负载,包括当前上下文和导入的模块 extends 与block标签配合使用 filter {filterupperlower} thisistext {endfilter} 将filter标签里面的经过upper处理在将结果经过lower处理,filter参数可选择多个 firstof 输出第一个不是False的参数 {firstofvar1var2var3} 等同于 {ifvar1} {{var1}} {elifvar2} {{var2}} {elifvar3} {{var3}} {endif} {firstofvar1var2var3fallbackvalue} 当所有参数都为False时,输出fallbackvalue 此标签自动转义默认值参数: {autoescapeoff} {firstofvar1var2var3fallbackvalue} {endautoescape} 可以使用safe管道符忽略转义: {firstofvar1var2safevar3fallbackvaluesafe} 可以用一下语法将输出值储存在变量value中: {firstofvar1var2var3asvalue} for 点运算符: variable。object 优先返回 varialbe〔object〕字典类型查找 variable。object属性查找 variable。object()方法调用 variable〔object〕列表索引查找 for循环设置中可用的变量 forloop。counter循环的当前迭代(1索引) forloop。counter0循环的当前迭代(0索引) forloop。revcounter循环结束时的迭代次数(1索引) forloop。revcounter0循环结束时的迭代次数(0索引) forloop。first如果这是第一次迭代,则为真 forloop。last如果这是最后一次迭代,则为真 forloop。parentloop对于嵌套循环,这是上一循环的forloop对象 for。。。。empty 配合for标签使用 {fornumberinnumbers} number {empty}numbers对象为空时执行 thenumbersisempty {endfor} if 条件判断语句 {ifathletelist} one {elifathleteinlockerroomlist} two {else} three {endif} 在if标签中可以使用布尔运算符orandnot等 在同一标签中同时使用and和or时and的优先级将大于or {ifathletelistandcoachlistorcheerleaderlist} 等于 if(athletelistandcoachlist)orcheerleaderlist if标签也可以用运算符!inis {ifabandbc} 也可以在if标签中使用过滤器 {ifmessageslength100} Youhavelotsofmessagestoday! {endif} ifchanged {fortintext} {ifchanged}{{t}}{endifchanged}当t的内容与上次重复时,不显示出来 {endfor} 也可以指定判断某个变量 {ifchangeddate。date}{{date。date}}{endifchanged} 也可以添加{else}标签 {ifchangedmatch。ballotid} some {else} some {endifchanged} include 加载一个模板并且用当前的上下文内容渲染它。这标签能用来在一个模板中包含另一个模板,模板的名字可以是一个变量或者是字符串。 {includefoobar。html} 模板名是相对于模板加载器的根目录的。字符串参数可以用。或者。。开头。 此标签的参数也可以指定一个拥有render()方法渲染内容的Template对象。 也可以在标签中用with指定参数 {includenamesnippet。htmlwithpersonJanegreetingHello} 可以指定字段only来指定只接受include内的参数来渲染 {includenamesnippet。htmlwithgreetingHionly} load 用于装载自定义的标签或者过滤器的库 lorem 用法: {lorem〔count〕〔method〕〔random〕} count:用来指定要生成的段落或者单词的数目(默认为1) method:w代表单词,p代表html段落,b代表纯文本段落 用来生成测试文本 now 用于格式化显示时间 Itis{nowjSFYH:i}可以使用反斜杠进行转义 也可以将输出的字符串作为变量储存下来 {nowYascurrentyear} regroup ? resetcycle 重置cycle的计数 也可以指定重置的cycle标签 {cycleonetwoasone} {cycleonetwoastwo} {resetcycleone} spaceless 清除html标签直接的空白符号(只删除标签之间的,标签和文本之间的不删除) {spaceless} Foo span {endspaceless} templatetag 用法: {templatetagparam} 将参数进行转义 param: openblock{ closeblock} openvariable{{ closevariable}} openbrace{ closebrace} opencomment{ closecomment} url 用给定的名称和可选参数返回结对路径引用,任何特殊的字符都将会用iritouri()编码。 语法: {urlsomeurlnamev1v2} 第一个参数是url的name,它可以是字符串或者变量 额外的参数是可选的,将用作为url上的参数 也可以使用关键词参数,但位置参数和关键词参数不要混合使用 {urlsomeurlnamearg1v1arg2v2} 如果指定的url不存在,则将会抛出一个NoReverseMatch错误,这将导致服务器返回一个错误页面。 一下调用将不会直接生成url,而是会保存在变量theurl中 {urlsomeurlnameargarg2astheurl} 可以使用标签{block}限定变量theurl作用的范围 verbatim 停止模板渲染引擎呈现此块标记的内容。 widthratio 按照比例计算数值 {widthratiothisvaluemaxvaluemaxwidth} 可以使用as储存数值 with 简化复杂的变量调用 {withtotalbusiness。employees。count} 这里可以直接使用total,total的作用域只存在标签体中 {endwith} 可以指定更多的参数 {withalpha1beta2} 。。。 {endwith} 过滤器: 内置过滤器:django。template。defaultfilters 过滤器改变变量的值和改变标签的参数 语法: {{djangotitle}}将变量django内容里面的每个单词首字符转换为大写 可以向过滤器传递参数: {{mydatedate:Ymd}} 内建的过滤器: add 将参数加载变量value上 {{valueadd:2}} 变量和参数也可以是其它的类型(例如stringlist) addslashes 转义 {{valueaddslashes}} 如果value是:ImusingDjango 将输出:ImusingDjango capfirst 将值的第一个字母大写 center {{valuecenter:15}} 将value居中在宽度为15 cut {{valuecut:param}} 将value中的全部param去掉 date 按照给定的格式去格式化日期 详细 default 当值为False时,则输出默认参数 如果值value为False,则输出nothing {{valuedefault:nothing}} defaultifnone 和default类似,不过仅在值为None时才输出默认值 dictsort 将列表中的字典按照给定的参数作为字段进行排序 〔 {name:zed,age:19}, {name:amy,age:22}, {name:joe,age:31}, 〕 参数为name 则输出: 〔 {name:amy,age:22}, {name:joe,age:31}, {name:zed,age:19}, 〕 或者是: {{valuedictsort:0}}参数应该输入int类型,而不是字符串类型 value: 〔 (a,42), (c,string), (b,foo), 〕 排序后: 〔 (a,42), (b,foo), (c,string), 〕 dictsortreversed 工作原理和上面一样,不过是倒序排序 pisibleby 如果value能被参数3整除,则输出True,否则输出False {{valuepisibleby:3}} escape 转义,在html中输出html标签的字符串表达 escapejs ?? filesizeformat {{valuefilesizeformat}}将value转换为有利于理解的文件大小字符串表示 first 返回列表中的第一个元素 {{valuefirst}} floatformat 如果不带参数,则四舍五入到小数点后一位 如果带参数,则四舍五入保留参数大小的小数个数(n为参数大小) 如果参数为零,则不保留小数 如果参数为负数,则四舍五入保留参数绝对值大小的小数个数,如果小数点后全为零,则忽略小数 forceescape 类似于escape,此过滤器立即应用并返回一个新的转义字符串 getdigit 给定一个整数,返回请求的数字 {{valuegetdigit:2}} 返回value的十位数字 若参数为3,则返回百位数字 iriencode 将value转换为适合包含在URL中的字符串表达形式 join 用给定的字符串连接列表,返回最终字符串表达形式 类似python的str。join(list) jsonscript NewinDjango2。1 安全地将Python对象输出为JSON,包装在 last 返回列表中最后的元素 {{valuelast}} length 返回序列对象的长度,对于未知类型,则返回0 lengthis 如果给定序列的长度等于传入的参数,则返回True,否则返回False linebreaks 将换行符转换为 一个新行加上一个空行变成了段落换行符span linebreaksbr 将换行符转换为 linenumbers 显示文本的行数 one two three 转换为: 1。one 2。two 3。three ljust {{valueljust:10}} 如果value是django,则输出Django lower 将给定的字符串全部转换为小写字符 makelist 将给定的字符串转换为列表 phone2numeric 将电话号码转换成数字输出 pluralize 应用于英文复数场景,参数可以定义输出的后缀 pprint 调试用?? random 随机输出给定的列表中的元素 {{valuerandom}} 如果value是〔a,b,c〕,则随机输出其中的一个 rjust 类似于ljust,不过对齐方式是向右 safe 标记内容,表示不用被转义 safeseq 类似于safe,但应用于列表中的每个参数 slice 给定一个列表,返回列表的切片对象 slugify 转换为ASCII。将空格转换为连字符。删除非字母数字、下划线或连字符的字符。转换为小写的。还可以去掉开头和结尾的空白。 Joelisaslug转换为joelisaslug stringformat 根据给定的参数格式化变量 {{valuestringformat:E}} 如果value为10,则输出1。000000E01 striptags 将给定的字符串中的html的全部标签删除 time 格式化时间 {{valuetime:H:i}}value为时间 timesince {{starttimesince:later}} 代表自从start之后,到later过了多少时间 相当于返回laterstart timeuntil {{starttimeuntil:before}} before为可选参数,代表在start之间的时间 返回从bofore到start过了多少时间(startbefore) title 将给定的字符串中所有的单词的首字母转换为大写,其它字符转换为小写 truncatechars 缩短字符串长度为给定的参数,缩短后字符串带。。。后缀 {{valuetruncatechars:9}} valueJoelisaslug 输出Joeli。。。 truncatecharshtml 类似truncatechars,但忽略html标签,将标签里面的内容自动缩短。 {{valuetruncatecharshtml:9}} value Joelisaslug 输出 Joeli。。。 truncatewords 类似truncatechars,但以一个单词为单位计算。 truncatewordshtml 类似truncatecharshtml,但以一个单词为单位计算。 unorderedlist 根据给定的嵌套的list自动生成嵌套的列表 upper 将给定的字符串中的字母全部转换为大写字母 urlencode 转义URL中使用的值 urlize 将给定的url地址转换为html中可点击的链接 urlizetrunc 类似于urlize和truncatechars的结合体 wordcount 返回给定字符串中单词的数量 wordwrap 指定每行的长度 {{valuewordwrap:5}} 如果value为Joelisaslug 则输出 Joel isa slug yesno 将给定值的布尔值转换为自定义的参数 {{valueyesno:yeah,no,maybe}} 如果value为True,则输出yeah 如果为False,则输出no 如果为None,则输出maybe(此参数可省略,如果省略,则默认输出False对应的结果)