【问题标题】:Django Template Engine datetime comparison not workingDjango模板引擎日期时间比较不起作用
【发布时间】:2020-07-23 01:31:36
【问题描述】:

我正在尝试在 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 %}

由于某种原因,删除按钮不会与这个 sn-p 一起出现,但是没有它它可以工作(即消息 ID/会话 ID 功能很好)。我尝试使用 relativedelta +/- 30 分钟的不同组合,created_at 大于/小于 message_time,但似乎没有任何效果。

【问题讨论】:

    标签: django django-templates comparator python-datetime python-relativedelta


    【解决方案1】:

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

    datetime.utcnow() 时区很幼稚(尽管有名字)。因此,在模板渲染的某个时刻,消息时间“重置”为 UTC 午夜(我无法完全解释原因,但 this answer 是我的线索)。

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

    【讨论】:

      猜你喜欢
      • 2013-03-18
      • 1970-01-01
      • 2021-12-31
      • 2018-09-25
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      相关资源
      最近更新 更多