Django3.2基于类视图和forms.py实现搜索返回空白页如何解决
问题根因与修复方案
存在的4处核心错误:
- 视图类选择错误:
FormView默认不会执行get_queryset方法,也不会自动将查询结果注入模板上下文,你模板中引用的city_list变量根本不存在 - 请求参数拼写错误:
self.request.Get.get("q")中Get应为全大写的GET,Django的请求对象中GET参数属性名是全大写格式 - 模板变量不匹配:你未在视图中指定
context_object_name,如果使用ListView默认传递的变量名是object_list,和你模板里写的city_list不对应 - FormView缺少必要配置:
FormView需要配置success_url指定表单提交后的跳转地址,你未配置也会导致异常
修复后的完整代码
views.py
from django.views.generic import ListView from .models import City from .forms import SearchForm class SearchResultsView(ListView): model = City template_name = "city/search_results.html" context_object_name = "city_list" # 匹配模板中的变量名 # 将搜索表单注入模板上下文 def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["form"] = SearchForm(self.request.GET) return context def get_queryset(self): query = self.request.GET.get("q") if query: return City.objects.filter(name__icontains=query) # 无搜索关键词时默认返回空结果,可根据需求改成返回所有城市 return City.objects.none()
额外校验项
- 确认你的
urls.py中配置的路由名称是city:search_results,和模板form的action属性匹配 - 确认模板文件
search_results.html确实放在city应用的templates/city/目录下,路径匹配视图中指定的模板地址
内容的提问来源于stack exchange,提问作者Shane S
相关产品推荐
相关产品推荐

