Django 05 自定义过滤器、自定义标签
Django 05 自定义过滤器、自定义标签
一、自定义过滤器
#1、在项目目录下创建一个python package包 取名为common(这个名字可以自定义) #2、在common目录下创建一个templatetags包 #3、在项目settings里面installed_apps里面添加common #4、在templatetags目录下创建一个py文件,名字自定义
模板过滤器的分析
#5、注册自定义过滤器 from django import template #导入template register = template.Library() #实例化template #过滤器cut的功能 @register.filter #注册方法二,使用装饰器的方法,注册名就是函数名 def mycut(value,arg): return value.replace(arg,'') register.filter('mycut',mycut) #注册注册方法一,前面一个是函数名,后面一个是注册名 #小写化的功能 @register.filter #方法2 def lower1(value): return value.lower() register.filter('lower1',lower1) #方法2
#6、导入 {% load common_extras %} {# 需要先导入这个模块才能使用自定义过滤器 #} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义过滤器及标签</title> </head> <body> 过滤器:{{ test|cut:'i' }} <br> 自定义过滤器:{{ test|mycut:'i' }} <br> 过滤器:{{ test|lower }} <br> 自定义过滤器: {{ test|lower1 }} <br> </body> </html>
二、自定义标签
简单标签的注册
from django import template #导入template
register = template.Library() #实例化template
import datetime
@register.simple_tag #注册
def current_time1(): #编写自定义标签
return datetime.datetime.now().strftime('%Y年%m月%d日 %H:%M:%S') #后面的strftime是自定义格式的意思
@register.simple_tag
def current_time2(format): #这种情况就可以在html里面赋值
return datetime.datetime.now().strftime(format)
@register.simple_tag(takes_context=True) #这种方法就可以在视图函数里面的context里面赋值
def current_time3(context):
format = context.get('format')
return datetime.datetime.now().strftime(format)
包含标签的注册
#包含标签的功能是可以通过渲染另外一个模板来显示一些数据 #例如很多地方都可能会用到下面这几行代码,除了choices这个变量不一样之外,其他的都是格式都一样的情况下,那么可以把这部分代码封装在一个包含标签里面 <ul> {% for i in choices %} <li>{{ i }}</li> {% endor %} </ul>
#1、创建一个固定格式的html文件 #2、为这个文件创建一个标签show_tags.html
<ul>
{% for foo in choice %}
<li>{{ foo }}</li>
{% endfor %}
</ul>
#包含标签 @register.inclusion_tag('book/show_tags.html') #利用装饰器注册,页面来自show_tags.html def show_results1(): #方式一,直接传 ls = ['x','y','z'] return {'choice':ls} #固定格式中的choice改为ls @register.inclusion_tag('book/show_tags.html') def show_results2(ls): #方式二:模板里面传变量 return {'choice':ls} @register.inclusion_tag('book/show_tags.html',takes_context=True) #必须要加上takes_context=True def show_results3(context): #方式三:上下文中获取 ls = context.get('ls') return {'choice':ls}