博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

模板语言 自定义函数simple_tag

Posted on 2018-12-24 20:29  alex_hrg  阅读(225)  评论(0编辑  收藏  举报

模板语言自带的一些处理函数:通过管道符来处理

帮助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}  转换成日期时间型
{{ bio|truncatewords:"30" }} 只取前30个字符
{{ my_list|first|upper }} 将第一个字母大写
{{ name|lower }} 全转换小写

有时我们须要自定义函数:  

@register.simple_tag   

a、在app中创建templatetags模块

b、创建任意 .py 文件,如:xx.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
#coding:utf-8
from django import template
from django.utils.safestring import mark_safe
   
register = template.Library()
   
@register.simple_tag
def my_simple_time(v1,v2,v3):
    return  v1 + v2 + v3
   
@register.simple_tag
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    return mark_safe(result)

c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名

1
{% load xx %}

d、使用simple_tag

1
2
{% my_simple_time 1 2 3%}
{% my_input 'id_username' 'hide'%}

e、在settings中配置当前app,不然django无法找到自定义的simple_tag  

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
)

 

@register.filter

注册filter跟tag步骤是一样的,只是把@register.simple_tag换成@register.filter,然后调用时用管道符方式,变量|函数名:"参数"

比较:

			simple_tag
				a. app下创建templatetags目录
				b. 任意xxoo.py文件
				c. 创建template对象 register
				d. 
					@register.simple_tag
					def func(a1,a2,a3....)
						return "asdfasd"
				e. settings中注册APP
				f. 顶部 {% load xxoo %}
				g. {% 函数名 arg1 arg2 %}
				缺点:
					不能作为if条件
				优点:
					参数任意
			filter
				a. app下创建templatetags目录
				b. 任意xxoo.py文件
				c. 创建template对象 register
				d. 
					@register.filter
					def func(a1,a2)
						return "asdfasd"
				e. settings中注册APP
				f. 顶部 {% load xxoo %}
				g. {{ 参数1|函数名:"参数二,参数三" }} {{ 参数1|函数名:数字 }}
				缺点:
					最多两个参数,不能加空格,非要多个参数得写成一个字符串,自己切分
				优点:
					能作为if条件