- 自定义过滤器
1.使用上述第二种创建公用的app utils ------ 工具,在utils app下创建templatetags包固定名称, ps:不要丢失 __init__.py 否则模板中加载不到
在templatetags下创建xxx.py文件,编写过滤器
2.py文件中 utils.templatetags.xxx.py
# coding=utf-8 from django import template # 代表该文件是自定义标签名 register固定写法 register = template.Library() # html模板中调用{{ msg|myCut:'args' }} 需要导入该py文件 {% load py_file_name %} @register.filter # 过滤器装饰器 def myCut(value, args): # 根据需求编写代码 return u'自定义过滤器某些字符返回小写: %s' % (value.replace(args, '').lower()) # python2默认ascill码 u'中文' unicode, pyhon3默认unicode
3.***需要在settings文件中导入该app utils
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'utils', # 创建自定义过滤器需要引入该app ]
自定义标签:
引用上述第二步pyfile:
@register.simple_tag def current_time(time_geshi): #html模板中调用 {% current_time '%Y-%m-%d %} return datetime.now().strftime(time_geshi)
自定义包含标签
应用场景:重复出现在html页面中的动态数据,而其他页面需要include 这个页面,会引用一次,需要在view中传值一次。
而将数据定义在包含标签,通过装饰器@register.inclusion_tag("my_menu11.html") 指定一个页面接收该数据,其他所有页面都可以通过 定义的{% my_menu %}去调用,类似 {% include "my_menu11.html"%}的效果. ps需要先加载该包含标签Py文件 {% load pyfilename %}
引用上述第二步pyfile:
@register.inclusion_tag("my_menu.html") #将返回值传给my_menu.html渲染 在将my_menu11.html引用给目标html。 ps:在目标html中使用 {% my_menu %}引用 def my_menu(): # 不加参数 # 类似在目标html使用{% include my_menu.html %} menu = {'a', 11, 'name': 'xiaom', 'age': 18}return {'menu': menu}
my_menu11.html
{% for m,v in menu.items %}
{{ m }}: {{ v }}
{% endfor %}
渲染的目标html中使用 {% my_menu %}引用
{% load custom %} 加载自定义包含标签py文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { margin: 0; padding: 0; } </style> </head> <body> 自定义包含标签<br>{% my_menu %}<br> </body> </html>