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

#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 ''
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值