import datetime import time import re from django.forms.widgets import Widget from django.forms.util import flatatt from django.utils.html import escape from django.utils.encoding import smart_unicode RE_DATE = re.compile(r'\d{4}-\d\d?-\d\d?$') def daterange(start_date, end_date): start_date = datetime.datetime.strptime(start_date, '%Y-%M-%d') end_date = datetime.datetime.strptime(end_date, '%Y-%M-%d') for n in range((end_date - start_date).days+1): yield start_date + datetime.timedelta(n) class SelectDateWidget(Widget): field = '%s_date' def __init__(self, start_date, end_date, attrs=None, required=True): self.attrs = attrs or {} self.required = required self.start_date = start_date self.end_date = end_date def render(self, name, value, attrs=None, choices=()): if value is None: value = '' final_attrs = self.build_attrs(attrs, name=name) output = [u'' % flatatt(final_attrs)] str_value = smart_unicode(value) for single_date in daterange(self.start_date, self.end_date): output.append(u'' % (time.strftime("%Y-%m-%d", single_date.timetuple()), time.strftime("%a %B %d, %Y", single_date.timetuple()))) output.append(u'') return u'\n'.join(output)