在Flask WTF表单中使用Jinja2预填充引导日期选择器的日期字段格式

1 投票
1 回答
5383 浏览
提问于 2025-04-18 06:27

这段代码可以正常工作,但填充的日期格式是2000-08-08,而日期选择器需要的是01-01-2000。

<form class="form form-inline" method="post" role="form">
{{ form.hidden_tag() }}
{{ wtf.form_errors(form) }}
<input data-provide="datepicker" format="mm/dd/yyyy" id="deadline"  type="text" value="{{ form.deadline.data }}" name="deadline"   required></input>
{{ wtf.form_field(form.complete) }}
{{ wtf.form_field(form.note) }}<br>
{{ wtf.form_field(form.submit) }} 
</form>  

我该如何更改预填充的格式,或者更改日期选择器需要的格式呢?在我的模型中,我有

deadline =DateField( 'Deadline (mm/dd/yyyy)',  format='%m/%d/%Y',validators = [Required()])

我可以在视图中更改吗?

@app.route('/edit/<name>', methods=['GET', 'POST'])
def edit_task(name):
    ptask=models.Tasks.query.filter_by(task=task).first()
    form = task_form(obj=ptask)
    form.populate_obj(ptask)
    tform=task_form(request.values)

更新

按照下面的方式更改格式的代码

 <input data-provide="datepicker" data-date-format="mm/dd/yyyy" id="deadline"  type="text" value="{{ form.deadline.data }}" name="deadline" required></input>

没有效果,日期仍然显示为年/月/日。

但是,按照下面的建议,将这个添加到我的视图中

ptask=models.Tasks.query.filter_by(task=task).first()
form = task_form(obj=ptask)
form.populate_obj(ptask)
form.deadline.data = ptask.deadline.strftime("%m/%d/%Y")

解决了这个问题。谢谢!

1 个回答

2

对于Bootstrap日期选择器,正确的日期格式属性是 data-date-format,这个在文档中有提到。更新后的日期选择器代码如下 –

<input data-provide="datepicker" data-date-format="mm/dd/yyyy" id="deadline"  type="text" value="{{ form.deadline.data }}" name="deadline" required></input>

以上的修改应该能解决你的问题。不过既然你问了,你也可以在视图中设置你想要的日期格式 –

form.deadline.data = ptask.deadline.strftime("%m/%d/%Y")

你可以在视图代码的最后一行(或者倒数第二行)插入这一行代码,前提是你已经填好了表单中的其他字段。

撰写回答