### 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表单,然后将填好的表单传给银行来进行诈骗、转账