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

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

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

复制一下,现在有三个模板
2020/03/03 01-模板打印九九方阵和自定义filter
现在想把二维降低成一维,传过去,这样吧所有的数据准备好了
2020/03/03 01-模板打印九九方阵和自定义filter
要么是模板计算,要么python计算,这两个计算量其实一点也没少,不用纠结在view函数工作,还是在模板工作
打印一下
2020/03/03 01-模板打印九九方阵和自定义filter
现在没有内容

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

2020/03/03 01-模板打印九九方阵和自定义filter
不能这么做
2020/03/03 01-模板打印九九方阵和自定义filter
counter0,改成0试试
2020/03/03 01-模板打印九九方阵和自定义filter
现在就行对整齐了
2020/03/03 01-模板打印九九方阵和自定义filter
现在是每遇到一个9就余0,99=81个,最大到80,0到81个元素
2020/03/03 01-模板打印九九方阵和自定义filter
也就是81后面没有tr,80和9取模,往后就没了
2020/03/03 01-模板打印九九方阵和自定义filter
不能这么写

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

这实际上是正比关系,宽度的比例
2020/03/03 01-模板打印九九方阵和自定义filter
**现在要给三个值,v1,v2,v3,v1/v2的比例和v3相乘=m
**2020/03/03 01-模板打印九九方阵和自定义filter

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

2020/03/03 01-模板打印九九方阵和自定义filter
现在需要在urls。把data换掉
2020/03/03 01-模板打印九九方阵和自定义filter
(1-10)的话是1到9,跑到t2模板了
2020/03/03 01-模板打印九九方阵和自定义filter
修改文件名

2020/03/03 01-模板打印九九方阵和自定义filter
外层拿1-9,里层也拿1-9
2020/03/03 01-模板打印九九方阵和自定义filter

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

2020/03/03 01-模板打印九九方阵和自定义filter
可以变成背景色

2020/03/03 01-模板打印九九方阵和自定义filter
现在就ok了
2020/03/03 01-模板打印九九方阵和自定义filter
比例也可以写成这样
2020/03/03 01-模板打印九九方阵和自定义filter
乘积没有了
2020/03/03 01-模板打印九九方阵和自定义filter
乘积as成一个变量了,可以写在后面
2020/03/03 01-模板打印九九方阵和自定义filter
只要写在内层循环内

2020/03/03 01-模板打印九九方阵和自定义filter
可以在后面加100
2020/03/03 01-模板打印九九方阵和自定义filter
可以使用,add相当于内建过滤器函数
2020/03/03 01-模板打印九九方阵和自定义filter
2020/03/03 01-模板打印九九方阵和自定义filter
要建立一个目录,就是包,这个目录要求是哪个应用就放在哪个应用中
2020/03/03 01-模板打印九九方阵和自定义filter

2020/03/03 01-模板打印九九方阵和自定义filter
在里面写python文件,建立自己的过滤器
2020/03/03 01-模板打印九九方阵和自定义filter
这是用来注册用的

2020/03/03 01-模板打印九九方阵和自定义filter
这个是文件层次

2020/03/03 01-模板打印九九方阵和自定义filter
写一个函数,乘法,名字以这个为准
2020/03/03 01-模板打印九九方阵和自定义filter
把t2里的复制到t3中
2020/03/03 01-模板打印九九方阵和自定义filter
改成t3

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

2020/03/03 01-模板打印九九方阵和自定义filter
传进来的数据有可能是字符串,所以转换一下int比较安全
2020/03/03 01-模板打印九九方阵和自定义filter
需要用load将这个模块加载一下,前提是需要注册,不注册用不了。
第一步在应用中构建一个包,这个包的名字必须是templatetags,这个包内建模块,模块内写你的filter,你的应用别忘记注册。
做好之后,要在模板中load模块,load完模块就可以跟内建的filter一样了

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