* 常见过滤器 
* 自定义过滤器
* 模板结构优化 
* 加载静态文件

## 复习

```
settings.py 中有一个  TEMPLATES 配置
BASE_DIR 你的项目目录  
'DIRS': [os.path.join(BASE_DIR, 'templates')]  项目目录下templates文件夹   
也就是说  render render_to_string 会来这里 查找模板

#'DIRS': [r"C:\templates"]  可以自定义主 templates 文件夹位置

'APP_DIRS': True, 要记得 在 settings.py中 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book'  #加入你创建的应用  要不然找不到这个模板  
]
APP_DIRS 为True 保证 每个app 都到自己目录下面的templates 然后将'DIRS': []为空

都没有 抛异常 templatedoesnotexists 异常

```

## with 标签

```
模板中想要定义变量  可以使用with语句

{#    <p>{{ people.0 }}</p>#}
{#    <p>{{ people.0 }}</p>#}
{#    <p>{{ people.0 }}</p>#}
这个方式 有点 麻烦

可以使用下面两种方法   
   {% with zelinx=people.0 %}   要求  =号前后 不能有 空格   
        <p>{{ zelinx }}</p>
        <p>{{ zelinx }}</p>
        <p>{{ zelinx }}</p>
    {% endwith %}

{% with people.0 as qulinx %}
        <p>{{ qulinx }}</p>
        <p>{{ qulinx }}</p>
        <p>{{ qulinx }}</p>
    {% endwith %}
```

## verbatim  标签

>  后期做项目 可能不止 DTL模板引擎 还有 https://github.com/aui/art-template  或者 vue       verbatim  标签    能够让  两个模板引擎共存

```
项目过程中 模板引擎 可能不止django自带的 DTL 还有 VUE VUE也是{{ }} 为了让部分代码  使用vue 解析方法

可以对 这部分代码  用  
 {% verbatim %}
        {{ 这里的代码用vue或者 art-template引擎 解析    }}
    {% endverbatim %}
    
 其它 用DTL来解析  
 
   {{ person.0 }}        这个输出的是  zhangsan   
    {% verbatim %}
        {{ kangbazi }}   这个输出的 是    {{kangbazi}}
    {% endverbatim %}
```

## 常用的过滤器

```
其实就是 函数  我们可以通过在 模板中定义函数 来实现  我们的 目的  
在 DTL模板中  不支持  圆括号传递参数   
{{greet('ee')}} 
正确的语法是 : 
{{value|函数名字:值}}
```

### add

将值和参数转成整型以后进行相加    如果不能转成整型  将值和参数 进行拼接

> {{value|add:参数}}

```
源代码 : 
    def add(value, arg):
    """Add the arg to the value."""
    try:
        return int(value) + int(arg)
    except (ValueError, TypeError):
        try:
            return value + arg
        except Exception:
            return ''
            
            
 示例代码: 
      context = {
        'num1':4,
        'num2':10,
    }
    
    {{ num1|add:num2}}  返回14  
```

### cut 过滤器  类似于 python中的replace  移除值中指定的字符串

> {{value|cut:""}}

```
{{ "hello world"|cut:"hello" }}  #返回的结果 world 
```

### date 时间过滤器

```
{{value|date:""}}

{{ today|date:"Y-m-d h:i:s" }}

Y 四位数年份 
    m 两位数月份  1-9  01-09 
    n 1-9 前面不加0  
    d 两位数字的天  
    h 小时  12小时  0前缀  
    i 分钟  0前缀
    s 秒  0前缀  
    H 小时  24小时制  0前缀  
    G 小时  前面没有 0前缀   
```

### default 过滤器

```
{{value|default:"默认值"}}

判断 value 是否为真   如果真 显示 value的值  如果为假 显示默认值

为false的情况  [] "" None {}
```

### default_if_none

```
{{value|default_if_none:"默认值"}}

只有 value 值为   None的时候  才显示默认值  如果 "" [] {} 认定为真   显示空字符串 等

context = {
        'value':None
    }
```

### first  返回 列表  元组  字符串的第一个元素

```
{{value|first}}

```

### last  返回 列表  元组  字符串的最后一个元素

```
{{value|last}}
```

### floatformat  使用四舍五入的方式 格式化 一个浮点类型

```
{{value|floatformat}} 默认保留一位小数点  
3.00000  返回 3 
3.1415  返回3.1 
3.15 返回3.2 四舍五入 保留一位小数点

{{ value|floatformat:3 }} 保留3位小数点    
```

### join 将列表  元组 字符串  使用 符号进行拼接

```
{{value|join:"@"}} 
```

### length   列表  元组 字符串  字典的长度

```
{{value|length}}
```

### lower  所有的字符串 转成小写

```
{{value|lower}}
```

### upper 所有的字符串转成大写

```
{{value|upper}}
```

### random  随机取出  列表 元组 字符串中的任意一值  点名器

```
{{value|random }}
```

### safe

>   {{ value|safe }}

```
标记 里边的字符串是安全的  你不用给我转义 
views.py
'value1':"<p>hello world</p>",
'value2':"<p>hello world</p>"
safe.html
{{ value1|safe }}
{{ value2 }}
结果:
hello world
<p>hello world</p>
```

### slice  类似于python中的切片操作

```
{{ value|slice:"0:"}} 
从0开始截取到最后
{{ value|slice:"0::2"}}

context = {
        'value':"0123456789"
    }
   
  输出02468
```

### striptags 删除字符串中所有的 html标签

```
{{ value|striptags }}

context = {
        'value':"<script>alert('我的每一支笔都知道你的名字')</script>"
    }      
最后输出 alert('我的每一支笔都知道你的名字')  
```

###  truncatechars  如果给定的字符串超过了  过滤器要求的长度   那么就会进行切割  然后拼接 ... 作为省略号

```
{{value|truncatechars:5}} 5这里 合理是指  2个字符+3个点

context = {
        'value':"<p>小爷,欢迎下次光临</p>"
    }   
最后结果: <p...
```

### truncatechars_html  如果给定的字符串超过了  过滤器要求的长度   那么就会进行切割  然后拼接 ... 作为省略号 跟上面的区别是  它不切割 html标签  只切割字符串

```
context = {
        'value':"<p>小爷,欢迎下次光临</p>"
    }
    
{{ value|truncatechars_html:6 }}

最终结果 
<p>小爷,...</p>
```

-------------------以上都是 DTL内置过滤器 相当于系统提前给你写好的函数   但是有时候还不能满足所有的需求 这个时候需要自定义 过滤器 也叫自定义函数   记住 过滤器最多两个参数  ----------

## 自定义  过滤器

* 模板的过滤器必须放在 app中   而且这个app 必须要安装在 settings.py 的INSTALLED_APPS 中  然后在app下面创建一个 python包    这个包的名字 必须叫   templatetags 在包里再创建一个python文件

```
  目录结构: 
      book
          models.py
          views.py
          urls.py
          templatetags 
              my_filter.py
  ```

* 到settings.py  INSTALLED_APPS写上应用的名字

* 接下来 就是在my_filter.py写过滤器代码  但是 毕竟是python的函数  必须要将  这个过滤器 注册到  模板中 以后在这个模板中 就可以使用这个函数了

* 过滤器最多两个参数

* 过滤器的第一个参数 永远是被过滤的那个参数  也就是  | 左边 那个

* 然后将其注册到 模板中

* 最后在页面上 要 {%load  my_filter%}

#### 示例代码

```
from django import  template
register = template.Library()   #这里是产生一个注册对象 
def kangbazi(value,word):
    return value+word

register.filter("kangbazi",kangbazi)  #将其注册进去
                这是在页面上显示的名字   后面是自定义的名字

{% load my_filter %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义过滤器 自定义函数 </title>
</head>
<body>
    {{ value|kangbazi:"下次再来" }}
</body>
</html>

django -- 过滤器相关推荐

  1. Django模板过滤器详解

    Django 模板过滤器也是我们在以后基于 Django 网站开发过程中会经常遇到的,如显示格式的转换.判断处理等.以下是 Django 过滤器列表,希望对为大家的开发带来一些方便. 一.形式:小写 ...

  2. vscode 中 django基本操作

    Visual Studio Code中使用Django Django是旨在快速,安全和可扩展的Web开发的高级Python框架.Django包括对URL路由,页面模板和数据处理的丰富支持. 在本Dja ...

  3. django html页面 Template模板语法

    二.定义模板 1. 模板语言(DTL)主要内容 1)变量 2)标签 { % 代码块 % } 3)过滤器 4)注释{# 代码或html #} 2. 变量 1)语法: {{ variable }} 2)当 ...

  4. python个人网站开发_python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

  5. python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

  6. c语言符号运算优先级6,c语言运算符号的优先级

    c语言运算符号的优先级 本文来自百度搜索只为查看方便 优先级等级口诀: 圆方括号.箭头一句号, 自增自减非反负.针强地址长度, 乘除,加减,再移位, 小等大等.等等不等, 八位与,七位异,六位或,五与 ...

  7. Django 框架13: 自定义过滤器和标签

    2019独角兽企业重金招聘Python工程师标准>>> Django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足开发要求,如果觉得需更精准的模板标签或者过滤器,可以自 ...

  8. django模板过滤器

    django模板&过滤器 声明:部分信息来源这篇博客https://www.cnblogs.com/maple-shaw/articles/9333821.html MVC: 模型(model ...

  9. Django 的模板语法之过滤器

    后端朝前端页面传递数据的方式# 第一种return render(request,'index.html',{'n':n})# 第二种return render(request,'index.html ...

  10. Django Context对象 + 过滤器 + 标签

    玩一玩上下文(context)对象 多数时间,你可以通过传递一个完全填充(full populated)的字典给 Context() 来初始化 上下文(Context) . 但是初始化以后,你也可以从 ...

最新文章

  1. java导出excel压缩包_java动态导出excel压缩成zip下载的方法
  2. android 收起下拉菜单,Android 展开/折叠 系统下拉通知栏
  3. 基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署
  4. Spring Cloud中的@EnableDiscoveryClient注解和@EnableEurekaClient注解
  5. abaqus利用python实现部件合并_python脚本实现abaqus前处理2D多晶粒建模(附完整源码)-Voronoi多边形的生成...
  6. 推荐一个很好用的 Android Studio 插件
  7. 高温持续,三峡水库向长江中下游补水5亿立方米
  8. 《深入理解计算机系统》第七章学习笔记
  9. 仿“当当网”首页-Flash图片轮换
  10. 《神奇的数学》读后感_奇妙的数学王国读后感10篇
  11. (wa待对拍)HDU - 2057 十六进制加法 难度:C++入门 复杂度:有点复杂 翻译难度:简单...
  12. 米家蓝牙温湿度计2 换用 LIR2032 充电电池的问题
  13. android 移动拼图效果实现
  14. nodejs 传递参数
  15. n1 linux wifi,N1 OpenWRT 当旁路由设置教程N1 LEDE作为辅助网关(旁路由)的网络设置...
  16. 羊皮卷之五:假如今天是我生命中的最后一天
  17. linux脚本简单定时,shell之定时周期性执行脚本的方法示例
  18. 为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE 1
  19. 【软件构造】面向正确性和健壮性的软件构造小记
  20. 不用会编程,也能做软件,无代码技术是否真有这么神奇?

热门文章

  1. python词云背景图_python数据分析可视化,制作你想要的背景图词云
  2. 实时渲染3D动画创作大赛
  3. 有关printf输出08x格式详解
  4. Unity 资源管理插件
  5. 如何用电脑下载微信视频号中的视频?
  6. 7年老Android一次操蛋的面试经历
  7. python画布组件_Python Tkinter 画布(Canvas)
  8. 超好用的办公软件推荐,总有一个你喜欢
  9. python魂斗罗源码_经典儿时游戏魂斗罗源代码
  10. 机器人 铁血兵团 魂斗罗_【魂斗罗铁血兵团中文版】魂斗罗铁血兵团中文版下载-街机中国...