2020/03/03 01-模板打印九九方阵和自定义filter

企业中可能模版使用多,前后端分离的少,用模板就是为了套用格式,做数据的呈现。但是数据有可能不是一行,从数据库查出来可能有几行,7,8列。一般用ul列表,table显示。
div一般作为布局

现在想要打印9*9=81个小格子,把内容填进去,然后用html的table展示
在这里插入图片描述
方法1,由视图函数提供数据,不要把复杂的操作交给模板,建议再提供数据前将复杂操作在python中搞定,在模板里填结果
用什么数据解构,可以用两层列表,一个列表9个元素,另外一个也是9个元素;也可以用二维的结构,写个字典。回来的最原始数据结构 如何处理

复制一下,现在有三个模板
在这里插入图片描述
现在想把二维降低成一维,传过去,这样吧所有的数据准备好了
在这里插入图片描述
要么是模板计算,要么python计算,这两个计算量其实一点也没少,不用纠结在view函数工作,还是在模板工作
打印一下
在这里插入图片描述
现在没有内容

在这里插入图片描述
现在数据准备好了,但是是一维的
在这里插入图片描述
在模板中如何控制,先把数据摆出来看看
在这里插入图片描述
现在数据足够长
在这里插入图片描述
for循环先把其中所有元素拿出来,现在这么打出现81行
在这里插入图片描述
假设现在写个错的
在这里插入图片描述
现在81行出来了,
在这里插入图片描述
动态生成的dom树,tr是补上了,因为渲染引擎有纠错能力,这个tr在没结束之前又碰到了一个tr,自然把上面的封口了在这里插入图片描述
现在是每一行都要换,能不能逢九再换,要写if。
如果1不能整除9是返回false

在这里插入图片描述
不能这么做
在这里插入图片描述
counter0,改成0试试
在这里插入图片描述
现在就行对整齐了
在这里插入图片描述
现在是每遇到一个9就余0,99=81个,最大到80,0到81个元素
在这里插入图片描述
也就是81后面没有tr,最大是80,在下一个出现tr要81,80和9取模,往后就没了
在这里插入图片描述
不能这么写

在这里插入图片描述
就变成这样了
在这里插入图片描述
这样就刚好错开了,一维的方式,玩数组就是玩索引
在这里插入图片描述
这个思路是由view函数解决数据的问题,前面的模板解决打印数据格式的问题,格式交给模板,数据交给view函数处理,模板只控制格式打印,这是第一种方式
在这里插入图片描述
用第二种方式,数据虽然在view函数处理,但是只是简单处理,想要在模板里解决计算问题,本身没有提供乘法,但是提供了一个标签,有计算能力
在这里插入图片描述
widthratio,yesno这些函数都filter,只不过称为模板中的标签tab,由模板提供的功能

这实际上是正比关系,宽度的比例
在这里插入图片描述
**现在要给三个值,v1,v2,v3,v1/v2的比例和v3相乘=m
**在这里插入图片描述

如何改成乘法,把v2改成1 ,就等于v11v3,这样就解决了乘法问题

在这里插入图片描述
现在需要在urls。把data换掉
在这里插入图片描述
(1-10)的话是1到9,跑到t2模板了
在这里插入图片描述
修改文件名

在这里插入图片描述
外层拿1-9,里层也拿1-9
在这里插入图片描述

这样就出来了基本上
在这里插入图片描述
*widthratio算法就是 i/1 j =n,这个标签会有个返回值就可以直接使用
在这里插入图片描述
在这里插入图片描述
换个位置
vv
i控制行,j控制列
在这里插入图片描述
在这里插入图片描述
奇偶行控制tr,奇偶列控制td,现在有个标签cycle,交替循环,第一次用的时候是red,第二次就是blue,再一次就是red,
在这里插入图片描述
循环里第一次路过tr,要计算这个值,然后就用第一个值red,会记住,第二次进来打第二行,用第二值blue
在这里插入图片描述
颜色应该是6位,刚好跟rgb混在一起,rgb是写三种颜色(用逗号隔开,每一个颜色是0-255刚好是16进制0-FFF)
FFF 和FFFFFF就是在颜色系统里等价的,css帮你压缩掉了,省了流量在这里插入图片描述
FFF就是白色

在这里插入图片描述
可以变成背景色

在这里插入图片描述
现在就ok了
在这里插入图片描述
比例也可以写成这样
在这里插入图片描述
乘积没有了
在这里插入图片描述
乘积as成一个变量了,可以写在后面
在这里插入图片描述
只要写在内层循环内

在这里插入图片描述
可以在后面加100
在这里插入图片描述
可以使用,add相当于内建过滤器函数
在这里插入图片描述
在这里插入图片描述
要建立一个目录,就是包,这个目录要求是哪个应用就放在哪个应用中
在这里插入图片描述

在这里插入图片描述
在里面写python文件,建立自己的过滤器
在这里插入图片描述
这是用来注册用的

在这里插入图片描述
这个是文件层次

在这里插入图片描述
在这里插入图片描述
写一个函数,乘法,名字以这个为准
在这里插入图片描述
把t2里的复制到t3中
在这里插入图片描述
改成t3

在这里插入图片描述
t3这次准备不用这个
在这里插入图片描述
把i送给了这给函数,然后把j也送进去,就有两个参数
在这里插入图片描述
在这里插入图片描述
出现问题了
在这里插入图片描述
不认识
在这里插入图片描述
因为还缺一个东西,要加标签,把模块名加一下,不用加应用名
在这里插入图片描述
但是换了个问题,提示需要1个参数,但是两个被提供了
在这里插入图片描述
再试试看
在这里插入图片描述
1000回来了
在这里插入图片描述
控制台打印的值,只能接收1-2个参数,0个参数不可以
在这里插入图片描述
i在前j在后

在这里插入图片描述
传进来的数据有可能是字符串,所以转换一下int比较安全
在这里插入图片描述
需要用load将这个模块加载一下,前提是需要注册,不注册用不了。
第一步在应用中构建一个包,这个包的名字必须是templatetags,这个包内建模块,模块内写你的filter,你的应用别忘记注册。
做好之后,要在模板中load模块,load完模块就可以跟内建的filter一样了

在这里插入图片描述
这个yesno,自始至终都要两个参数,一个是前面的i,后面的字符串,只不过把后面的字符串用split切一下,切完了才做处理,过滤器这里 要求只能接收两个参数,将管道前的作为第一个参数,后面有没有无所谓,要是后面定义了参数,最好给缺省值,否则报错,不能使用可变参数
在这里插入图片描述
在这里插入图片描述
这样就得到我们想要的结果了
在这里插入图片描述
如果很多地方要做统一操作,建议写一个自定义的filter
在这里插入图片描述
现在有三个模板,
第一个将数据在view处理完,然后再模板显示,能降低维度是最好的
第二个乘法,这里用了标签widthratio
第三个自定义filter函数,用自定义的filter函数比较麻烦,构建目录,注册,再模板里要load模块。load之后定义的才可以使用。
filter函数是一到两个参数,参数不对会抛出异常。
最好的办法都是第一种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值