首页 > 解决方案 > Django 提交表单并保留搜索结果

问题描述

我将 Django 用于用户可以在其中搜索图像并将其添加到列表中的页面。在顶部,有一个包含所有可用列表的下拉列表,在页面“body”中有一个搜索表单,用户可以在其中按标签搜索图像。

<form action="{% url 'qwe:search' %}" method="get">
    {% csrf_token %}
    <input type="text" name="q" placeholder="Search..." {% if query_string %} value="{{query_string}}" {% endif %}>
    <input type="submit" value="Search">
</form>

提交时,用户将获得带有搜索结果列表的同一页面。

def search(request):
    query_string = request.GET["q"]
    if (query_string == None):
        return HttpResponseBadRequest()

    search_results_list = img_search(query_string, max_results=25)
    list_list = helpers.get_lists()

    context = {"search_results_list" : search_results_list, "query_string" : request.GET["q"], "lists " : list_list }
    return render(request, 'qwe/index.html', context)

我希望用户能够创建其他列表,所以我在下拉列表旁边添加了一个按钮。当用户单击它时,它会打开一个对话框 (div),其中包含一个包含新列表名称输入的表单。

问题:在不丢失搜索结果的情况下,提交用于创建新列表的表单的最佳方式是什么?

我这样做主要是为了学习目的,所以欢迎每一个提示。

谢谢你。

标签: pythonhtmldjango

解决方案


我能想到的最明显的方法是创建一个<input type="hidden" \>作为表单的一部分,其值为query_string. 这将允许服务器在收到表单详细信息时知道原始搜索查询是什么。

事实上,假设search_results_list是可序列化的(我猜它是可序列化的,但您的代码不知道其中有什么),您可以序列化它并将该字符串作为隐藏输入发送 - 这样您就可以传输实际的搜索结果,而不仅仅是导致他们的查询。


推荐阅读