开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第34天,点击查看活动详情
五,自定义过滤器及标签
满足额外需求
一,自定义过滤器(常用在App下创建)
一,在App下创建
1.创建templatetags包,注意,这是一个python包
2.创建customer_filters.py文件
3.配置:
在setting.py下配置,添加App名
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'student'
]
二,在根目录下创建
1.应用场景:当我们想要定义一个或多个App公用的时候
2.配置:在根目录下创建一个python包,再在setting下添加App名
三,过滤器导入
1.在App下的templatetags下的customer_filter里面创建过滤器并注册
2.在模板里面导入模板标签{% load customer_filters %}
3.引用:直接使用模板变量,<td>{{ data.sex|to_sex:'en' }}</td>
注意:[to_sex:'en'] 过滤器通过 [:参数]的方式传参,传入的为过滤器的第二个参数
-
自定义一个过滤器并注册(通过装饰器或者直接注册)
-
通过模板标签和模板变量使用过滤器
二,自定义标签
2.1,简单标签simplet-tag
Django内置的简单标签如:{% url 'app_name:name' data.name %} data.name是参数
作用:接收多个参数,根据输入的参数和信息进行处理,然后再返回结果
一,创建cumstor_tags.py文件
1.在templatetags包下面创建cumstor_tags.py文件
2.直接注册或者通过装饰器注册
- 自定义一个简单标签并注册(通过装饰器或者直接注册)
-
直接在模板里面使用模板标签
-
模板标签传参:以format_str为例子(需要通过模板,不美观):
-
在视图函数内通过context传送数据format_str到模板里面
-
在模板里面通过模板标签把format_str传入自定义模板标签内处理
-
模板标签处理数据并返回模板
-
-
引用上下文变量(自定义模板标签直接拿视图函数的context内容,不用通过模板)
- 自定义标签设置三步骤,只能能取到视图函数view.py里面的context
- 注意!
- 在哪个模板里面使用自定义模板标签,他的context取的就是那个模板的context
- 如果一个视图函数返回了很多个context,要会通过模板区分
- 自定义标签设置三步骤,只能能取到视图函数view.py里面的context
2.2,包含标签include_tag
作用:通过渲染另一个模板来显示数据
一,创建cumstor_tags.py文件
1.在templatetags包下面创建cumstor_tags.py文件
2.直接注册或者通过装饰器注册
-
自定义一个包含标签并注册(通过装饰器或者直接注册)
-
创意一个用于配合 包含标签 渲染的模板
-
在模板中通过模板标签传入数据(这里的值就传入了包含标签的values里)
渲染成功
-
优化(传入多个参数进行判断返回不同的页面)
{% show aaa.lesson style='link' %} # 自定义包含标签可以传多个参数,用‘=’传-
自定义一个包含标签并注册(通过装饰器或者直接注册)
-
创意一个用于配合 包含标签 渲染的模板
-
在模板中通过模板标签传入数据(这里的值就传入了包含标签的values里)
效果图片:
-
-
引用上下文变量:同上
三,总结
-
简单标签:return什么就返回什么
@register.simple_tag(name='hello', takes_context=True) def hello(context): return context['hello'] -
包含标签:先接收数据,通过模板渲染后返回数据
@register.inclusion_tag('student/show_list.html') def show(values, style): return {'ls': values, 'style': style}