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

Django中提交搜索后如何保留搜索栏内已输入的搜索内容

Django搜索提交后保留输入框内容配置方法

核心思路是把用户提交的搜索关键词随搜索结果一起回传到模板,绑定到搜索输入框的value属性即可,不需要额外安装插件或修改全局配置,按以下两步操作:

1. 视图层:将搜索关键词传入模板上下文

无论使用函数视图还是类视图,拿到用户提交的搜索参数后,将参数加入渲染模板的上下文字典即可,以下是两种常见视图的参考代码:

函数视图示例

from django.shortcuts import render
from .models import Post  # 替换为你自己的模型类

def post_search(request):
    # 如果你用POST提交搜索,把GET换成POST即可,搜索场景更推荐GET方式
    keyword = request.GET.get('search', '')
    result_list = []
    if keyword:
        # 保留你原有的搜索逻辑,以下仅为示例
        result_list = Post.objects.filter(title__icontains=keyword)
    # 把搜索关键词和结果一起传入模板
    return render(request, 'search.html', {
        'results': result_list,
        'search_keyword': keyword
    })

类视图示例

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

class PostSearchView(ListView):
    model = Post
    template_name = 'search.html'
    context_object_name = 'results'

    def get_queryset(self):
        self.keyword = self.request.GET.get('search', '')
        if self.keyword:
            return Post.objects.filter(title__icontains=self.keyword)
        return Post.objects.none()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 将关键词加入上下文
        context['search_keyword'] = self.keyword
        return context

2. 模板层:绑定输入框value属性

找到模板中搜索表单的输入框代码,给value属性绑定回传的search_keyword模板变量即可,Django模板默认会对变量做HTML转义,无需额外处理XSS风险:

<form method="get" action="{% url 'post_search' %}">
    <!-- 核心是添加value="{{ search_keyword }}"配置 -->
    <input 
        type="text" 
        name="search" 
        placeholder="请输入搜索关键词"
        value="{{ search_keyword }}"
    >
    <button type="submit">搜索</button>
</form>

<!-- 原有搜索结果渲染逻辑保持不变 -->
{% for item in results %}
<div class="result-item">
    <h3>{{ item.title }}</h3>
    <p>{{ item.content|truncatechars:100 }}</p>
</div>
{% empty %}
<p>暂无匹配的搜索结果</p>
{% endfor %}

如果你使用Django自带的Form组件实现搜索表单,不需要手动给input标签加value属性,只要在实例化表单时传入用户提交的参数,Django会自动渲染保留输入值:

# 视图层示例
from .forms import SearchForm

def post_search(request):
    form = SearchForm(request.GET or None)
    result_list = []
    if form.is_valid():
        keyword = form.cleaned_data['search']
        result_list = Post.objects.filter(title__icontains=keyword)
    return render(request, 'search.html', {'form': form, 'results': result_list})

模板层直接渲染表单字段即可自动保留输入:

<form method="get" action="{% url 'post_search' %}">
    {% csrf_token %}
    {{ form.search }}
    <button type="submit">搜索</button>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:36:23