想要一个计算时间差的功能, 数据库就是默认的 datetime.now 保存的。
现在通过models.objects.all() 获取了对象,传给模板。
但模板循环显示出 是 201x年 x.x.x 这种格式。如果我需要显示 1天前 14小时前 15分钟前。
逻辑是要写在view的请求函数内吗? 我个人感觉不是很规范。是不是要用js写到模板里才对?
想要一个计算时间差的功能, 数据库就是默认的 datetime.now 保存的。
现在通过models.objects.all() 获取了对象,传给模板。
但模板循环显示出 是 201x年 x.x.x 这种格式。如果我需要显示 1天前 14小时前 15分钟前。
逻辑是要写在view的请求函数内吗? 我个人感觉不是很规范。是不是要用js写到模板里才对?
尝试在view中写了一个loop并设置了属性,不知道 这种是不是django规范的开发写法呢?
import datetime
def get_time_offset(timestmp):
n = 0
t = '天'
r = '{} {}前'
offset = datetime.datetime.now() - timestmp.replace(tzinfo=None)
s = offset.total_seconds()
if 60 > s > 0:
n = (offset.seconds)
t = '秒'
elif 60 * 60 > s > 60:
n = s / 60
t = '分钟'
elif (60 * 60) * 24 > s > 60:
n = s / 60 * 60
t = '小时'
elif 7 > offset.days > 1:
n = (offset.days)
t = '天'
elif 30 > offset.days > 7:
n = (offset.day / 7)
t = '周'
elif 360 > offset.days > 30:
n = (offset.days / 30)
t = '月'
elif offset.days > 365:
n = (offset.days / 365)
t = '年'
return r.format(int(n), t)
def all_question(request):
quest_data = models.Question.objects.all()[:20]
base_t = loader.get_template('base.html')
head_t = loader.get_template('base_head.html')
view_t = loader.get_template('quest_list_view.html')
head_html = head_t.render({})
for a in quest_data:
a.after_time = get_time_offset(a.post_time)
view_html = view_t.render({'quest_data': quest_data})
view_html = base_t.render({'head': head_html, 'view': view_html})
return HttpResponse(view_html)
1 回答1.1k 阅读✓ 已解决
1 回答798 阅读✓ 已解决
1 回答698 阅读✓ 已解决
1 回答664 阅读
652 阅读
django有自带的filter