在Django模板中获取自某个时间的天、小时和分钟

3 投票
1 回答
1938 浏览
提问于 2025-04-18 13:34

我想在Django模板中获取日期,显示为天、小时和分钟。

我的view.py文件是

from django.utils import timezone    
def get_user_specific_android_crave_one(request):

    if request.method=="GET":
        craves1=CraveData.objects.all().count()
        if craves1==0:

            html = render_to_string('crave/ajax/nocrave.html')
            print html
            return HttpResponse(html,mimetype="application/text")
        else:
            craves=list(CraveData.objects.all().order_by("-date"))                
            #fbUser = FacebookUser.objects.get(person=request.user)
            #print fbUser.image                        
            for crave in craves:
                #fbUser = FacebookUser.objects.get(person=CraveData.facebookuser)
                print crave
                nc = timezone.now()
                cc = crave.date
                dc = nc-cc
                secc=dc.seconds
                hours = secc // 3600
                secc = secc - (hours * 3600)
                minutes = secc // 60
                lastc = '%s hours %s minutes ago' % (hours, minutes)
                reply= list(Comment.objects.filter(crave=crave))
                print reply
                for repl in reply:
                crave.reply = reply
                html = render_to_string('crave/ajax/crave.html',{"craves":craves,"lastc":lastc})
                return HttpResponse(html,mimetype="application/json")

我的crave.html文件是

<div>{% for crave in craves  %}
{{crave.person}}{{ crave }}<br/>
{{lastc}}<!--------- To get date in days hours and minute format since crave made--------->
 {% endfor %}
</div>

在这里,我能获取时间,但所有的crave显示的时间都是一样的,比如“两个小时10分钟前”。所有的crave时间都一样,因为我从视图中获取的是同一个变量值。我想知道在模板中如何把Django的标准日期格式转换成我想要的日期格式。我使用{{crave.time}}能得到每个crave的正确日期,但这是Django的标准格式。我想显示成“1天前”、“2小时前”、“20分钟前”,这取决于crave创建的时间。我在网上搜索了很多,但没有找到相关的信息。请帮帮我。

1 个回答

4

你可以使用 naturaltime,这里有一个 Django 的文档。下面是一个简单的例子:

{% load humanize %}
{{ datimeobject|naturaltime }}

它会显示类似于 29秒前 或者 1周2天后 这样的内容。

注意,你需要加载 humanize

撰写回答