物联网笔记-----------Django之templatetags

来源:互联网 发布:视频合并软件绿色版 编辑:程序博客网 时间:2024/05/16 02:28

1、

给Django模板写后台程序,可以在templatetags文件夹中写module。注意,每个APP中都可以写创建templatetags来进行tags 模块的书写,但是每个APP,templatetags文件夹中的module(.py文件)的名称不能一样。否则会出现错误:


官方文档:https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/


实验代码:


# -*- coding: utf-8 -*-from django import templatefrom vd.models import *from datetime import datetime,time,timedelta,datefrom django.utils.html import format_html  # 引入format_html模块register = template.Library() # 生成一个注册器@register.simple_tag # 注册到语法库,过滤语法 ,就是把数据输入进来,内部执行后把def getCountMoney(ven,choice):saStartTime=str(datetime.now().date())html=0.00;saStartTime = saStartTime + " 00:00:00"saStartTime = datetime.strptime(saStartTime, '%Y-%m-%d %H:%M:%S')saFinishTime = saStartTime + timedelta(days=+1);infor = Inforsales.objects.filter(Ven=ven).filter(SaStartTime__gte=saStartTime).filter(SaStartTime__lte=saFinishTime).filter(SaPayState=1)if choice==1:#今日销售额for inf in infor:html= html + inf.SaTotalPrice;return format_html(str(html))else:counts=0;for inf in infor:saInforsdict=eval(inf.SaInfors);counts=counts+saInforsdict['nums']return format_html(str(counts))

在HTML中只需填上:{% load module的名称 %}(不含扩展名)放到HTML的开头

HTML中用{%getCountMoney 参数1 参数2 %} 

注意,调用tag是,tag名称跟%之间没有空格。

总结:templatetags主要用于HTML完成不了的语法。比如,for不能使用for item in range(len(list)):  没有方法range,此时就可以在templatetags的模块中编辑来达到自己的需求。

2、