在Django模板中获取特定日期
你好,我需要在我的Django模板文件中检查每个月的第10天,谁能告诉我该怎么做呢?其实我想在每个月的第10天之前显示一些数据,而在第10天之后隐藏这些数据。
1 个回答
4
有几个事情需要理解:
- Django的模板语言其实并不是为了“真正的”编程而设计的。它的核心就是在拼接字符串。
- 它不支持真正的“表达式”。
- …但它支持基本的条件判断和循环。
- 所以虽然你可以检查一个值是否等于、超过或低于另一个值,但你不能做更多的事情。
- 除非你使用过滤器或自定义模板标签。
- 过滤器可以把一个值转换成另一个值。
- 模板标签可以做更复杂的事情,这超出了这个问题的范围。
- 虽然过滤器或自定义模板标签都能达到你想要的效果,但用起来可能有点复杂。
所以,在我看来,最简单的方法是:
- 在你的视图中计算当前日期的天数。
- 把这个值传递给你的模板。
- 在模板中对传入的值进行一个简单的“是否大于”的检查,和数字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,而不是特定传入那一天。这样做虽然不那么明确,但更通用和灵活。