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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:54:03