Django模板引擎日期时间比较不起作用



我正试图在Django中构建一个类似BBS的小型应用程序,我希望能够限制用户删除30分钟以上的帖子。但是,我无法在模板引擎中进行日期时间比较。

以下是我的观点片段:

context = {
            ...
            "message_time" : datetime.utcnow() + relativedelta(minutes=-30) 
        }

这是html:中的django模板

{% if request.session.userid == post.user.id and post.created_at >= message_time %}
            <form action="/wall/message/{{ post.id }}/delete" method="POST">
            {% csrf_token %}
            <button type="submit">Delete</button>
            </form>
            {% endif %}

出于某种原因,删除按钮不会与此代码段一起出现,但它在没有它的情况下可以工作(即消息id/会话id功能很好(。我尝试过使用relativelta+/-30分钟的不同组合,created_at大于/小于message_time,但似乎都不起作用。

对于阅读本文的人来说,我发现了问题:

utcnow((是时区幼稚(尽管有名称(。因此,在呈现模板时的某个时刻;重置";到UTC午夜(我无法完全解释原因,但这个答案让我明白了(。

使用datetime.now(timezone.utc(可以将datetime作为aware和utc传递,从而阻止了问题的发生。

最新更新