在Django模板中获取特定日期

1 投票
1 回答
2687 浏览
提问于 2025-04-17 19:02

你好,我需要在我的Django模板文件中检查每个月的第10天,谁能告诉我该怎么做呢?其实我想在每个月的第10天之前显示一些数据,而在第10天之后隐藏这些数据。

1 个回答

4

有几个事情需要理解:

  1. Django的模板语言其实并不是为了“真正的”编程而设计的。它的核心就是在拼接字符串。
  2. 它不支持真正的“表达式”。
  3. …但它支持基本的条件判断和循环。
  4. 所以虽然你可以检查一个值是否等于、超过或低于另一个值,但你不能做更多的事情。
  5. 除非你使用过滤器或自定义模板标签。
  6. 过滤器可以把一个值转换成另一个值。
  7. 模板标签可以做更复杂的事情,这超出了这个问题的范围。
  8. 虽然过滤器或自定义模板标签都能达到你想要的效果,但用起来可能有点复杂。

所以,在我看来,最简单的方法是:

  1. 在你的视图中计算当前日期的天数。
  2. 把这个值传递给你的模板。
  3. 在模板中对传入的值进行一个简单的“是否大于”的检查,和数字10进行比较。

所以,我们的视图大概是这样的:

def sample_view(request, *args, **kwargs):
    from datetime import date
    current_date = date.today()
    current_day = int(current_date.day) # force a cast to an int, just to be explicit
    return render_to_response("template", {'day_of_the_month': current_day })

然后在我们的模板中,我们会这样做:

{% if day_of_the_month > 10 %}
    <!-- Stuff to show after the 10th -->
{% else %}
    <!-- Stuff to show before the 10th -->
{% endif %}

这样做可能会把一些你基于日期想要隐藏的东西暴露给模板,出于安全原因,你绝不要根据if/then的检查在模板中隐藏安全内容。

如果你需要做额外的检查,你可以直接传入current_date,然后检查current_date.day是否大于10,而不是特定传入那一天。这样做虽然不那么明确,但更通用和灵活。

撰写回答