我在模板引擎中使用两种方法作为自定义标记:
# 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])
Run Code Online (Sandbox Code Playgroud)
正如您在评论中看到的那样,我正在尝试生成用于构建日期和时间值的选择字段.
我的第一个问题是,如何使日,月,小时和分钟范围使用两位数?例如,代码生成"1,2,3 ......",而我想要"01,02,03".
接下来,当生成字段时,即使我告诉select_field方法在值等于提供的datetime值时添加"selected"属性,也不会自动选择提供的日期时间的值.
最后,如何获取所提供日期时间的12小时周期标识符(AM/PM)?目前,我只是默认选择'AM',但我想从datetime本身提供这个值.
要将整数范围转换为两位数字符串:
>>> range(13)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> [ '%02d' % i for i in range(13) ]
['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
Run Code Online (Sandbox Code Playgroud)
然后获取AM/PM指标:
>>> import datetime
>>> current_dt = datetime.datetime.now()
>>> current_dt
datetime.datetime(2009, 2, 4, 22, 2, 14, 390000)
>>> ['AM','PM'][current_dt.hour>=12]
'PM'
Run Code Online (Sandbox Code Playgroud)
瞧!
| 归档时间: |
|
| 查看次数: |
2439 次 |
| 最近记录: |