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

如何默认隐藏条目列表,仅在搜索后显示匹配结果?

实现默认仅显示搜索框、搜索后展示匹配结果的功能

需求:现有页面默认展示所有元素列表,输入搜索值后显示匹配元素。需要改成默认只显示搜索框,执行搜索后才展示匹配的元素。

方案一:合并视图(推荐,简化代码)

1. 修改 views.py

原代码里HomeView会返回所有申请数据,导致默认显示全量列表。直接把搜索逻辑合并到HomeView里,默认返回空数据,只有搜索时才返回匹配结果:

from django.views.generic import ListView
from .models import Application

class HomeView(ListView):
    model = Application
    template_name = 'home.html'

    def get_queryset(self):
        # 获取用户输入的搜索关键词
        search_key = self.request.GET.get("q")
        if search_key:
            # 有搜索词就返回匹配的申请记录
            return Application.objects.filter(appnumber__icontains=search_key)
        # 默认返回空集合,不显示任何列表
        return Application.objects.none()

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        # 把搜索词传到模板,用于输入框回显
        context["q"] = self.request.GET.get("q")
        return context

2. 修改 urls.py

合并视图后,不需要单独的Search路由了,删掉它只保留HomeView:

from django.urls import path
from .views import HomeView

urlpatterns = [
    path('', HomeView.as_view(), name="home"),
]

3. 修改 home.html

调整表单提交地址为当前页面,并且只有搜索后才显示结果区域,还能处理无匹配的情况:

<div class="headtext">
    <form method="GET" action="{% url 'home' %}">
        <input type="search" name="q" placeholder="输入申请编号" value="{{ q }}">
        <button type="submit">查找</button>
    </form>
</div>
<!-- 只有执行过搜索,才展示结果列表 -->
{% if q %}
<div>
  {% for application in object_list %}
        <div>
            <p>申请编号: {{ application.appnumber }}, 状态: {{ application.status }}</p>
        </div>
  {% empty %}
        <p>未找到匹配的申请记录</p>
  {% endfor %}
</div>
{% endif %}

细节说明:

  • 输入框加value="{{ q }}",搜索后能保留关键词,方便用户调整搜索内容
  • 用{% if q %}判断,没搜索时完全不显示结果区域
  • 加{% empty %}处理搜不到的情况,避免页面空落落的

方案二:保留原有双视图结构

如果不想改路由结构,也可以保留原来的HomeView和Search视图,只做小调整:

1. 修改 views.py 的HomeView

让HomeView默认返回空数据:

class HomeView(ListView):
    model = Application
    template_name = 'home.html'
    # 默认不返回任何数据
    queryset = Application.objects.none()

Search视图保持不变即可。

2. 修改 home.html

只需要加个判断,只有搜索后才显示结果:

<div class="headtext">
    <form method="GET" action="{% url 'search' %}">
        <input type="search" name="q" placeholder="输入申请编号" value="{{ q }}">
        <button type="submit">查找</button>
    </form>
</div>
{% if q %}
<div>
  {% for application in object_list %}
        <div>
            <p>申请编号: {{ application.appnumber }}, 状态: {{ application.status }}</p>
        </div>
  {% empty %}
        <p>未找到匹配的申请记录</p>
  {% endfor %}
</div>
{% endif %}

内容的提问来源于stack exchange,提问作者Stew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:25:16