Django进阶项目
本来想上午轻轻松松搞定,没想到还是出了其他的问题,好在最后都解决了
在middleware.py当中
# -*- coding:utf-8 -*-__author__ = 'feimao'import re 正则表达式处理方式from django.shortcuts import renderclass Version(object):def process_request(self,request):agent = request.META['HTTP_USER_AGENT']获取浏览器版本信息,通过request获取result = re.findall('MSIE [5678]', agent)匹配符合条件的字符串if len(result)>0:return render(request,'warning.html') 用render方法发挥渲染过的页面,不用进行跳转,跳转比较麻烦,但是需要了解一下
定义了中间件,在settings.py里面是这么写的
'todolist.middleware.Version',然后就可以顺利使用了
然后是定义过滤器
在templatetags包里定义了
# -*- coding: utf-8 -*-from django import templateregister = template.Library()from datetime import datetime__author__ = 'feimao'@register.filterdef times(value):result = '刚刚'now = datetime.utcnow()value = value.replace(tzinfo=None)days = (now-value).daysif days != 0:result = str(days)+'天前'else:seconds =(now-value).secondsif seconds/3600 != 0 :result = str(seconds/3600) + '小时前'else:result = str(seconds/60) + '分钟前'return result
这里就比较恶心了,因为在数据库当中保存的时间格式是UTC的格式,所以我就直接取当前时间的UTC格式了
now = datetime.utcnow()
但是我发现还是不能够直接相减否则会报can't subtract offset-naive and offset-aware datetimes这样的错误
问题就出在利用datetime.datetime.now()得到的当前时间是offset-naive的,而另外一个却是offset-aware的,因此我们需要将这里的dt转成与now一样的形式,可以这么做:
1 2 3 4 5 | >>> dt = dt.replace(tzinfo=None)>>> dtdatetime.datetime(2014, 4, 18, 15, 37, 7)>>> now - dtdatetime.timedelta(0, 34108, 443000) |
这样写就可以了

浙公网安备 33010602011771号