我正试图在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传递,从而阻止了问题的发生。