您的位置:首页 > 编程语言 > Go语言

Django自定义模板过滤器和标签

2016-01-27 11:08 886 查看
#coding=utf8
'''自定义模板标签过滤器及标签'''
from django import template
import datetime
import re             #正则匹配相关的库
register=template.Library()   #用来注册自定义的过滤器

@register.filter
def Mylower(value):
'''自定义过滤器:大写转小写,value为变量名,arg为变量值'''
return value.lower()

#自定义标签
#第一步编写编译函数
@register.tag(name='current_time')
def do_current_time(parser,token):
try:
tag_name,format_str=token.split_contents()
except ValueError:
error_msg='%s tag requires single argument' % token.split_contents()[0]
raise template.TemplateSyntaxError(error_msg)
return CurrentTimeNode(format_str[1:-1])
#第二步编写节点
class CurrentTimeNode(template.Node):
def __init__(self,format_str):
self.format_str=format_str

def render(self, context):
now=datetime.datetime.now()
return now.strftime(self.format_str)

#自定义标签,带上下文变量
@register.tag(name='current_time2')
def do_current_time2(parser,token):
try:
tag_name,arg=token.contents.split(None,1)     #None代表空格,按空格切割,仅切割一次
except ValueError:
error_msg='%s tag requires arguments' % token.split_contents()[0]
raise template.TemplateSyntaxError(error_msg)
m=re.search(r'(.*?) as (\w+)',arg)
if m:
format_str,var_name=m.groups()
else:
error_msg='%s tag had invalid arguments' % tag_name
raise template.TemplateSyntaxError(error_msg)
if not (format_str[0]==format_str[-1] and format_str[0] in ['"',"'"]):
error_msg="%s tag's format_argument should in quotes" % tag_name
raise template.TemplateSyntaxError(error_msg)
return CurrentTimeNode2(format_str,var_name)

class CurrentTimeNode2(template.Node):
def __init__(self,format_str,var_name):
self.format_str=format_str
self.var_name=var_name
def render(self, context):
now=datetime.datetime.now()
context[self.var_name]=now.strftime(self.format_str)
return ''
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django