Django学习随手记(二)
来源:互联网 发布:手机淘宝直播怎么看 编辑:程序博客网 时间:2024/06/05 15:01
由于Django的模板模板中不支持使用python原生的方法,所以在使用的时候非常不便,例如需要将时间戳转换为日期格式。如果是一条数据,那么可以在views.py中查询之后将时间戳转换后再传输到页面上,但是有多条数据的时候此方法就不太适用了(虽然也可以实现)。为了解决这个不便,Django提供了自定义tag。这里对自定义tag的用法做一个总结。
class TimeToDateNode(template.Node): def __init__(self, format_string): self.format_string = format_string pass def render(self, context): #返回的是格式化后的时间表示字符串 timestr = self.format_string.resolve(context, True) timestr = float(timestr) ltime = time.localtime(timestr) return time.strftime("%Y-%m-%d %H:%M:%S",ltime ) @register.tag("time_to_date") def do_current_time(parser, token): try: tag_name, format_string = token.split_contents() except ValueError: msg = '%r tag requires a single argument' % token.split_contents()[0] raise template.TemplateSyntaxError(msg) format_string = parser.compile_filter(format_string) return TimeToDateNode(format_string)
在templatetags文件夹中新建一个mytags.py,这段代码便是mytags中的(省去了头部的编码,import以及register = template.Library()等,这里只是核心代码)。
此处新建了一个类叫做TimeToDateNote,继承自template.Node,所有的自定义tags都必须从这个类继承。类中第一个init 方法和第二个render方法是固定的,第三个方法自行命名。
起初在页面上用{% time_to_date 1456127043.0 %}直接做测试是可以正常打印出日期的,但是{% time_to_date key.add_time %}这样用却是一直报错,表示key.addtime并未被识别。查阅大量博客等资料后,添加了倒数第二行的format_string = parser.compile_filter(format_string)
,并且稍稍修改了render方法(主要是添加了timestr = self.format_string.resolve(context, True)
),测试之后竟然OK了,也就是说可以识别key.addtime了,目前至少可以实现想要的功能,且其他需要使用这种方法的地方也可以依样画葫芦了。至于这么做的实现原理以及所有变量是如何一步步被转化的,以后再细细研究吧。。
- Django学习随手记(二)
- Django学习随手记(一)
- Django学习随手记(三)
- Django学习随手记(四)
- Django学习随手记(五)
- Django学习随手记(六)
- Django学习随手记(七)
- Django学习随手记(八)
- CI学习随手记(二)
- 学习hector_slam随手记录(二)
- Django学习(二)
- django学习记录(二)
- Django学习笔记(二)
- Django学习笔记(二)
- Django学习笔记(二)
- Python.Django学习(二)
- wireshark学习随手记
- 前台学习随手记
- 集合-泛型-迭代
- Poj 1185 炮兵阵地
- C++宏定义详解
- Android Studio 代码混淆
- JAVA CAS原理深度分析
- Django学习随手记(二)
- 60条有名的原则与定理
- POJ 2940 Wine Trading in Gergovia(简单贪心)
- Unity3d–Admob Android插件谷歌播放服务-插播式广告
- spring 事务传播机制
- 消息队列技术的介绍和原理(MQ)
- Android Service 的两种启动方法
- 前台通过JS请求后台的几种方法
- 关于org.apache.catalina.LifecycleException解决方案