You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Django接收用户日期传入外部Python脚本时出现日期格式不匹配错误

解决Django日期传递到外部脚本的格式不匹配问题

这个错误的根源很清晰:你从Django表单传递给water.py的日期格式,和脚本里用来解析的格式完全不匹配。

问题拆解

  • 当你使用Django的forms.DateInput(attrs={'type': 'date'})时,浏览器会返回**YYYY-MM-DD**格式的日期字符串(比如你看到的'2022-01-01')。
  • 但你在water.py里用datetime.strptime(start_date, "%y/%d/%m")来解析,这个格式对应的是两位年份/日/月(比如'22/01/01'),自然会触发格式不匹配的ValueError。

解决方案(二选一即可)

方案1:修改water.py的解析格式,匹配传入的日期

直接把water.py里的日期解析格式改成和Django传递的格式一致:

from datetime import datetime
import sys

current_level=int(sys.argv[1])
x=sys.argv[2]
start_date=sys.argv[3]
print(start_date)
# 改成YYYY-MM-DD对应的格式字符串
start=datetime.strptime(start_date, "%Y-%m-%d")

方案2:在Django的views.py里转换日期格式后再传递

如果你必须让water.py保持%y/%d/%m的解析格式,可以在视图层先把日期转换成对应的格式:

# views.py里的修改部分
def generate(request):
    form=NameForm(request.POST)
    if form.is_valid():
        a=str(form.cleaned_data.get('lev'))
        b= form.cleaned_data.get('status')
        # 注意:form.cleaned_data.get('start_date')返回的是datetime.date对象,直接用strftime格式化
        start_date_obj = form.cleaned_data.get('start_date')
        c = start_date_obj.strftime("%y/%d/%m")  # 转换成两位年份/日/月的格式
        output=run([sys.executable,'C:\\Users\\siddhant\\Desktop\\internship\\indicator\\work\\water.py',a,b,c],stdout=PIPE,text=True)
        events_list=level.objects.all()
        return render(request,'result.html',{'res':events_list})

额外提示

  • 尽量避免在不同模块间用字符串传递日期,最好用ISO标准格式(YYYY-MM-DD),这种格式兼容性更强,不容易出错。
  • 如果你需要在Django表单里显示自定义格式的日期,可以调整DateInput的format参数,但要注意提交时的实际格式还是由浏览器的type='date'决定的,所以推荐保持type='date'默认的ISO格式。

内容的提问来源于stack exchange,提问作者Siddhant singh Bhadauria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:17:41