如何在django模板中循环日期时间范围

时间:2015-06-11 13:23:29

标签: python django django-templates

我想从列中的当前日期循环到xxx日期 我正在考虑使用这个功能:

from datetime import timedelta, date


def daterange(start_date, end_date):
    start_date = datetime.date.today()
    end_date = start_date + datetime.timedelta(days=5)
    for n in range(int((end_date - start_date).days)):
        yield start_date + timedelta(n)



for single_date in daterange(start_date, end_date):
    print single_date.strftime("%Y/%m/%d")

但我不知道如何将它传递给views.py

中的上下文

我想要这样的东西,但是在几天之内:

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用自定义模板标记解决此问题:

首先创建文件结构。进入需要标记的app目录,并添加以下文件:

  

templatetags

     

templatetags /的初始化的.py

     

templatetags / custom_tags.py

templatetags / custom_tags.py文件:

from django import template

register = template.Library()

@register.daterange
def daterange(start_date, end_date):
    start_date = datetime.date.today()
    end_date = start_date + datetime.timedelta(days=5)
    for n in range(int((end_date - start_date).days)):
        yield start_date + timedelta(n)

模板部分:

{% load custom_tags%}


{%for date_out in start_date|daterange:timedelta %}
   <!-- do something here with date_out -->
{% endfor %}

答案 1 :(得分:1)

我还有另一种方法:

只需将此函数传递给上下文'daterange': daterange()

即可
def daterange(start_date, end_date):
    start_date = datetime.date.today()
    end_date = start_date + datetime.timedelta(days=5)
    for n in range(int((end_date - start_date).days)):
        yield start_date + timedelta(n)

并在您的模板中:

{% for i in date_range %}
...
{% endfor %}