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

如何实现搜索完成后将用户重定向至另一模板页面?

问题解决:将搜索结果跳转至独立页面展示

问题描述

当前搜索表单的结果直接显示在表单下方,需要修改为提交搜索后跳转到独立页面展示过滤数据。

解决方案步骤

1. 修改表单提交目标

更新表单模板,指定提交后跳转的结果页面URL,保持GET方法以携带搜索参数:

<form method="GET" action="{% url 'search_results' %}">
    <div>
        <input type="search" name="title_contains" placeholder="标题包含">
        <span><div><i class="fa fa-search"></i></div></span>
    </div>
    <div>
        <input type="search" name="title_or_author" placeholder="标题或作者">
        <span>
            <div><i class="fa fa-search"></i></div>
        </span>
    </div>
    ...
    <button type="submit">搜索</button>
</form>

2. 创建搜索结果视图

新建视图处理搜索参数、过滤数据,并渲染结果页面:

from django.shortcuts import render
from .models import Product
from django.db.models import Q

def is_valid_queryparam(param):
    return param != '' and param is not None

def SearchResultsView(request):
    qs = Product.objects.all()
    title_contains_query = request.GET.get('title_contains')
    title_or_author_query = request.GET.get('title_or_author')

    if is_valid_queryparam(title_contains_query):
        qs = qs.filter(title__icontains=title_contains_query)
    elif is_valid_queryparam(title_or_author_query):
        qs = qs.filter(Q(title__icontains=title_or_author_query) | Q(author__username__icontains=title_or_author_query)).distinct()

    context = {
        'queryset': qs
    }
    return render(request, 'main/search_results.html', context)

3. 创建结果页面模板

新建search_results.html模板,仅展示搜索结果:

<div>
    <h2>搜索结果</h2>
    <ul>
        {% for product in queryset %}
        <li>
            {{ product.title }}
            <span>作者: {{ product.author.username }}</span>
            <span>发布日期: {{ product.date_posted }}</span>
        </li>
        <hr />
        {% empty %}
        <li>没有找到匹配的产品</li>
        {% endfor %}
    </ul>
</div>

4. 配置URL路由

在项目urls.py中添加结果页面的路由映射:

from django.urls import path
from .views import FilterView, SearchResultsView

urlpatterns = [
    path('', FilterView, name='filter_form'),  # 原表单页面路由
    path('search-results/', SearchResultsView, name='search_results'),  # 结果页面路由
]

补充优化

如果原FilterView仅负责展示表单,可简化其逻辑:

def FilterView(request):
    return render(request, 'main/form.html')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:10:15