Django提交表单并保留搜索结果

时间:2018-09-22 15:01:57

标签: python html django

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

<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),该对话框的窗体包含新列表名称的输入。

问题: 提交表单以创建新列表而不丢失搜索结果的最佳方法是什么?

我这样做主要是出于学习目的,因此欢迎大家提供提示。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

实际上,假设search_results_list是可序列化的(我想是可序列化的,但是您的代码不知道其中包含什么),则可以对其进行序列化并将该字符串作为隐藏输入发送-这样您是在传递实际的搜索结果,而不仅仅是发送给他们的查询。