Django表单场景下如何从视图向HTML页面返回并展示计算值
解决方案
你完全不需要替换render写法,问题出在变量传递链路断了:计算出的时长只在函数里打印到终端,既没有返回给视图,视图渲染模板时也没有把值传给模板上下文,所以HTML拿不到数据。
按下面两步改就能正常显示:
1. 修改计算函数,返回结果
你的time_difference函数最后只做了打印,没有把计算好的时长返回,补上return逻辑:
def time_difference(): current_time = datetime.now().strftime(("%Y-%m-%d %H:%M:%S")) time_now = datetime.strptime(current_time, "%Y-%m-%d %H:%M:%S") get_start_date_time = logTimes.objects.get(fast_finished = False) fast_started = get_start_date_time.start_date_time difference = time_now - fast_started duration = difference.total_seconds() days = divmod(duration, 86400) hours = divmod(days[1], 3600) minutes = divmod(hours[1], 60) seconds = divmod(minutes[1], 1) difference_less_microseconds = str(difference).split(".")[0] print(difference_less_microseconds) # 新增:把计算结果返回给调用方 return difference_less_microseconds
2. 视图层接收返回值,传入模板
调用计算函数后接住结果,在render的第三个参数(上下文字典)里把值传给模板,模板里的{{ duration }}就能拿到值了:
elif request.method == 'POST' and 'duration' in request.POST: # 接收计算函数返回的时长 fast_duration = time_difference() # 传入模板上下文,key名和模板里用的变量名保持一致即可 return render(request,'startandstoptimes/index.html', {'duration': fast_duration}) else: return render(request,'startandstoptimes/index.html')
补充说明
render()本身就是Django封装好用来渲染模板的工具,内部会自动生成HttpResponse返回,完全满足你这个简单场景的需求,不需要额外替换成原生HttpResponse。- Django模板默认不能直接访问视图里的局部变量,所有要在HTML里用的变量,都必须通过render的上下文字典显式传入,你之前没传值,模板里的
{% if duration %}判断永远为假,自然不会渲染时长内容。
内容的提问来源于stack exchange,提问作者deucalion0
相关产品推荐
相关产品推荐

