Django无法获取数据库中Destination_Tour对象,无报错但数据为空
问题诊断与修复方案
问题根源
你的视图函数中,GET请求分支(else块)直接返回了仅包含min_date和max_date的render响应,导致后续组装的包含DT、slider等数据库查询结果的context代码永远不会被执行,模板自然无法获取这些数据。
修复后的代码
from datetime import datetime from django.shortcuts import render # 导入你的模型类 from .models import Place, Slider, Destination_Tour def index(request): min_date = f"{datetime.now().date().year}-{datetime.now().date().month}-{datetime.now().date().day}" max_date = f"{datetime.now().date().year if (datetime.now().date().month+3)<=12 else datetime.now().date().year+1}-{(datetime.now().date().month + 3) if (datetime.now().date().month+3)<=12 else (datetime.now().date().month+3-12)}-{datetime.now().date().day}" citynames = Place.objects.all() slider = Slider.objects.all() DT = Destination_Tour.objects.all() if request.method == 'POST': origin = request.POST.get('Origin') destination = request.POST.get('Destination') depart_date = request.POST.get('DepartDate') seat = request.POST.get('SeatClass') trip_type = request.POST.get('TripType') citynames = Place.objects.all() if trip_type == '1': # 补充POST分支中需要的所有上下文数据 return render(request, 'base.html', { 'origin': origin, 'destination': destination, 'depart_date': depart_date, 'seat': seat.lower(), 'trip_type': trip_type, 'name': citynames, 'sd': slider, 'DT': DT, 'min_date': min_date, 'max_date': max_date }) # GET请求或POST分支未触发trip_type==1的情况,使用全局上下文 context = { 'name': citynames, 'sd': slider, 'DT': DT, 'min_date': min_date, 'max_date': max_date } return render(request, 'base.html', context=context)
修改说明
- 移除了原else分支的直接return语句,将
min_date和max_date整合到全局context中,确保GET请求能获取到所有必要数据 - 在POST分支的
trip_type == '1'逻辑里,补充了sd、DT等上下文数据,避免该分支返回时模板缺失数据 - 所有请求路径最终都会使用包含完整数据库查询结果的上下文渲染模板
内容的提问来源于stack exchange,提问作者DevStro
相关产品推荐
相关产品推荐

