У меня есть два метода, которые я использую в качестве пользовательских тегов в шаблонизаторе:
# Renders a <select> form field
def select_field(options, selected_item, field_name):
options = [(str(v),str(v)) for v in options]
html = ['<select name="%s">' % field_name]
for k,v in options:
tmp = '<option '
if k == selected_item:
tmp += 'selected '
tmp += 'value="%s">%s</option>' % (k,v)
html.append(tmp)
html.append('</select>')
return '\n'.join(html)
# Renders a collection of <select> fields for datetime values
def datetime_field(current_dt, field_name):
if current_dt == None:
current_dt = datetime.datetime.now()
day = select_field(range(1, 32), current_dt.day, field_name + "_day")
month = select_field(range(1, 13), current_dt.month, field_name + "_month")
year = select_field(range(datetime.datetime.now().year, datetime.datetime.now().year + 10), current_dt.year, field_name + "_year")
hour = select_field(range(1, 13), current_dt.hour, field_name + "_hour")
minute = select_field(range(1, 60), current_dt.minute, field_name + "_minute")
period = select_field(['AM', 'PM'], 'AM', field_name + "_period")
return "\n".join([day, '/', month, '/', year, ' at ', hour, ':', minute, period])
Как вы можете видеть в комментариях, я пытаюсь сгенерировать выбранные поля для построения значения даты и времени.
Мой первый вопрос: как сделать так, чтобы диапазоны дня, месяца, часа и минуты использовали две цифры? Например, код генерирует «1, 2, 3 ...», а я хотел бы «01, 02, 03».
Далее, когда поля генерируются, значения предоставленного datetime не выбираются автоматически, хотя я советую методу select_field добавить атрибут «selected», когда значение равно предоставленному значению datetime.
Наконец, как мне получить 12-часовой идентификатор периода (AM / PM) для предоставленной даты и времени? На данный момент я просто выбираю «AM» по умолчанию, но я бы хотел указать это значение из самой даты и времени.