首页 > 解决方案 > 使用 Django 搜索的子字符串

问题描述

如何使用 Django 搜索文件名的子字符串

视图.py

def search(request):
    entries = util.list_entries()
    find_entries = list()

    search_box = request.POST.get("q").capitalize()

    if search_box in entries:
        return HttpResponseRedirect(f"wiki/{search_box}")
    
    for entry in entries:
        if search_box in entry:
            find_entries.append(entry)
            return render(request, "encyclopedia/search.html", {
                "search_result": find_entries,
                "search": search_box
            })
        else:
            print(f'{find_entries}')
    else:
        return render(request, "encyclopedia/search.html", {"no_result": f"No results for {search_box}"})

搜索.html:

{% extends "encyclopedia/layout.html" %}

{% block title %}
    search results
{% endblock %}

{% block body %}
    {% for result in search_result %}
        <li><a href=wiki/{{ result }}>{{ result }}</a></li>
    {% endfor %}
    <h1>{{ no_result }}</h1>
{% endblock %}

我试过但只返回一个结果,例如如果我搜索'd'它只返回django然后停止 for 循环而不返回另一个值,例如节点

标签: pythonhtmldjango

解决方案


第一次成功迭代后,您将退出 for 循环。更改代码如下:

for entry in entries:
    if search_box in entry:
        find_entries.append(entry)
    else:
        print(f'{find_entries}')
if find_entries:
    return render(request, "encyclopedia/search.html", {
       "search_result": find_entries,
       "search": search_box
    })
...

推荐阅读