如何在HTML中将日期从“月 日,年”转换为yyyy-mm-dd格式适配date输入框
问题根因
HTML 中type="date"的输入框对value属性的格式有强制要求,仅接受YYYY-MM-DD格式的字符串,不符合格式的赋值会被浏览器直接忽略。
首次加载时Django渲染的是日期对象的本地化格式(如Nov 12, 2021),不符合要求因此赋值失效;手动选择日期提交后,存入数据库的是前端输入框返回的合法格式,后续加载时渲染的内容符合要求因此可以正常显示。
修复方案
1 模板层直接格式化(推荐)
直接在模板中使用Django内置的date过滤器将日期转为符合要求的格式,同时补上缺失的属性引号、POST表单必填的csrf防护标记,修正后前端代码如下:
<html> <body> <form method="POST"> {% csrf_token %} <input type='date' value="{{ project.deadline|date:'Y-m-d' }}"> <input type='submit' value='submit'> </form> </body> </html>
2 视图层提前格式化
也可以在视图层提前把日期转为指定格式的字符串再传递到模板:
from django.utils.dateformat import format def profile(request,id): project=Project.objects.get(id=id) # 提前格式化日期为YYYY-MM-DD project.deadline_str = format(project.deadline, 'Y-m-d') if request.method=='POST': # 注意原代码中的request.post为小写是错误写法,需改为大写的POST deadline=request.POST.get('deadline') project.deadline=deadline project.save() return render(request,'edit_project.html',{'id':id,'project':project})
对应模板中输入框的写法改为:
<input type='date' value="{{ project.deadline_str }}">
内容的提问来源于stack exchange,提问作者Harshit Singh
相关产品推荐
相关产品推荐

