概要
- 与大部分模板引擎相同,Django的模板引擎也提供了Jinja2过滤器的功能,该过滤器的作用是对后端传递给前端的数据在显示或者使用前进行进一步的修饰或者筛选,从而可以将后端视图函数的对数据的处理变得更加的简洁,同时也提高了数据的耦合性。Jinja2使用文档
Jinja2常用的过滤器
safe : HTML代码渲染时不转义,即渲染时表达HTML代码
capitalize : 把值的首字母转换成大写,其他字母转换成小写
lower : 把值转换成小写形式
upper : 把值转换成大写形式
title : 把值中每个单词的首字母都转换成大写
trim : 把值的首尾空格去掉
striptags : 渲染前把值中所有的HTML标签都删掉
自定义变量过滤器
- 当默认的过滤器不能满足我们的要求时,就需要根据自己的要求自定义变量过滤器
1:在对应的Django应用下建立一个Python包(即含有__init__.py的文件夹),其名称固定为templatetags
,再在其中建立一个书写过滤器的.py文件,其结构如下:
├─myapp # 对应的应用
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ ├─migrations
│ │ │ 0001_initial.py
│ │ │ __init__.py
│ │ │
│ │ └─__pycache__
│ │ 0001_initial.cpython-36.pyc
│ │ __init__.cpython-36.pyc
│ │
│ ├─templates
│ │ 404.html
│ │ content.html
│ │ index.html
│ │ information.html
│ │
│ ├─templatetags
│ │ custom_filter.py # 自定义的过滤器
│ │ __init__.py
2: 在settings.py中注册templatetages
目录
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'myapp.templatetags', # 注册自定义过滤器
]
3:自定义过滤器
# -*- coding: utf-8 -*-
# @File : custom_filter.py
# @Author: 一稚杨
# @Date : 2018/12/30/030
# @Desc : 自定义过滤器
from django import template
register = template.Library()
# 修饰器注册自定义的过滤器
@register.filter
# 需要注意的是当我们在前端调用自定义的过滤器时,默认会传递一个参数,即原来的数据
def test(value, data):
print(value)
# 将data转化为~
return value.replace(data, '~')
当我们在前端调用修饰器时,默认会将修饰的内容作为参数传递给修饰器函数,所以我们定义修饰函数至少要接受一个参数,同时前端在传递其他参数时只能再传递一个参数,所以最多只能定义两个参数。
4:前端调用修饰器
首先需要使用{% load custom_filter %}
来导入对应的文件(其中custom_filter为创建的.py文件的名称),再使用{{ blog.content|test:'123' }}
来使用过滤器,特别需要注意的是这里最多只能自定义一个参数。