### 11.4 HTML中Filter过滤器 MVC和MTV - MVC: - M:model 模型 - V:view视图 HTML - C:controller 控制器 ——路由器 传递指令、业务逻辑 - MTV: - M: model 模块 ORM - T:template 模板 HTML - V:view 业务逻辑 模板和变量之间的关系 - 在html中变量都用{{}}接收 - 方法有:.索引 .key .属性 .方法 - {{list.索引}} ——正向索引 - {{dic.keys}} - {{dic.value}} - {{dic.items}} - {{pub.name}} #### 11.4.1 filter过滤器 语法:{{value|filter_name:参数}} 内置过滤器 - default {{value|default:"nothing"}} #变量名不存在或者为空的时候,显示的默认值 - filesizeformat 文件的大小 - add 相当于加法,字符串的拼接、列表的拼接 - slice {{hobby|slice:"-2:0:-1"}} 切片 - date {{now|date:"Y-m-d H:i:s"}} - ```python #setting中的配置(设置时间的默认格式): USER_L10N = False DATETIME_FORMAT = 'Y-m-d H:i:s' ``` - safe 如果传HTML的语句,会进行安全处理,将其转化成字符串,safe能将html语句直接进行传递 - length 取长度 - join 使用字符串连接列表 - first 取第一个 - last 取最后一个 自定义filter 1. 在app下创建一个名为templatetags的python 2. 在python中创建py文件,文件名自定义为任何名字。例如(my_tags.py) 3. 在该文件中写: ```python from django import template register = template.Library() #register也不能改变 ``` 4.写函数+装饰器 ```python @register.fliter def add_xx(value,arg) #最多两个参数 return "{}-{}".format(value,arg) ``` 5.在html中使用 ```html {% load my_tags%} {{'liujia'|add_xx:'nb'}} ``` ### 11.5 for循环和if判断 ```html {% for book in all_book%} <tr> ....... </tr> {% empty %} <td colspan='s' style='text-algin:center'>没有相关的数据</td> #当循环的列表是空的时候 {% endfor %} ``` foorloop ```html {% for i in list %} {{i}} {{forloop.conuter}} {% endfor %} counter 从1开始 conuter0 从0开始 recounter 到1结束 recounter0 到0结束 ``` with ```html {% with 变量 as new %} {{new}} {%endwith%} ``` 连续判断 - python 10>5>1 ----> 10>5 and 5>1 ----->true - js 10>5>1 ------>10>5---> true>1-----false - 模板中不支持连续判断,也不支持算数运算 csrf_token - csrf 跨站请求伪造 - 浏览器从钓网站获取了银行的form表单,然后将填好的表单传给银行来进行诈骗、转账