如何实现搜索完成后将用户重定向至另一模板页面?
问题解决:将搜索结果跳转至独立页面展示
问题描述
当前搜索表单的结果直接显示在表单下方,需要修改为提交搜索后跳转到独立页面展示过滤数据。
解决方案步骤
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
相关产品推荐
相关产品推荐

