文件路径配置
说明:为了便于管理,在主目录下创建一个特有的文件夹,以存放整个自定义文件,以下为配置的步骤
- 创建 “common” 文件夹,在其中创建 “templatetags” 包,其中“templatetags” 为固定名字。
- 把 common 当成一个app在setting.py文件内进行注册
- 创建第一个自定义函数存放文件
├── common
│ └── templatetags
│ ├── customize_test.py
实例化一个注册器
过滤器、标签就是为了对传入的信息进行加工展示,给这个“加工的函数”添上一个装饰器,就是所谓的过滤器、标签,而这个添加装饰器的过程通常称之为“注册”。首先实例化一个作为注册器的对象。
# customize_test.py
from django import template
register = template.Library() # 万恶之源
自定义过滤器
过滤器实例
- 定义一个为数据两边加上一堆星星的函数
- 对星星数量进行控制(带参数的过滤器示例)
# customize_test.py
@register.filter
def add_star(value):
return '*****'+str(value)+'*****'
# 如果不加入name属性,则过滤器默认以函数名为名
@register.filter(name='add_star2')
def add_star2(value, num):
return '{}{}{}'.format('*'*num, str(value), '*'*num)
过滤器的引入
- 在需要进行数据展示的模板进行引用
# 加载
{% load customize_test %}
# 传入一个string:‘ABCDEFG’ 进行测试
{{ string|add_star }} <br>
{{ string|add_star2:10 }} <br>
- 配置好相应url,引用后效果
自定义简单标签
简单标签的实例
- 标签的引用和注册与上述过滤器相同,只是需要封装的装饰器函数有不同。如下
# 返回当前时间
@register.simple_tag
def current_time():
return datetime.datetime.now()
# 按格式返回
@register.simple_tag
def current_time2(format_string):
return datetime.datetime.now().strftime(format_string)
- 模板中引用示例
{% current_time %}
{% current_time2 '%Y-%m-%d' %}
上下文变量的引用
在自定义过滤器、标签中除了可以对自身接收的参数进行处理,还能获取别的标签或过滤器接收到的值。如下列代码,对上文提到的string值进行了“窃取”,并返回。
@register.simple_tag(takes_context=True)
def get_other(context):
return context.get('string')
自定义包含标签
功能
包含标签的功能是可以通过渲染另外一个模板来显示一些数据。过程大致如下图所示。
包含标签的示例
- 创建待渲染的模板 include_tag_mode1.html
- 写一个得到一堆数字按键的小功能
{% for i in content %}
<button>{{ i }}</button>
{% endfor %}
- 写一个包含标签函数, 对于包含标签的函数,以键值对的形式返回值,供待渲染的模板使用
@register.inclusion_tag('test/include_tag_mode1.html')
def include_mode1():
return {'content': [i for i in range(10)]}
- 进行调用
{% include_mode1 %}
- 于是得到了一串数字按键。
- 使用包含标签进行传值渲染后返回最终结果,在模板的使用中仅仅需要一次调用,这方法拿来写个广告窗口它不香吗?哪里有需求,在哪里调用,避免了一大坨广告代码占位的尴尬 [要恰饭的嘛.jpg]
- 如需带参数使用包含标签与使用上下文变量,方法与过滤器及简单标签一致,在此不做赘述。
END