0

我正在尝试在 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 功能很好)。我尝试使用 relativedelta +/- 30 分钟的不同组合,created_at 大于/小于 message_time,但似乎没有任何效果。

4

1 回答 1

0

对于任何阅读本文的人,我发现了这个问题:

datetime.utcnow() 是天真的时区(尽管有名字)。因此,在模板渲染的某个时刻,消息时间“重置”为 UTC 午夜(我无法完全解释原因,但这个答案让我明白了)。

使用 datetime.now(timezone.utc) 让我可以通过知道的日期时间和 UTC,这阻止了问题的发生。

于 2020-07-24T00:52:10.423 回答