首页 > 解决方案 > 在 Django 中无法从搜索栏呈现结果

问题描述

我一直在 django 的搜索栏上工作,我很接近但在将结果呈现到页面时遇到了一些问题。

视图.py

class SearchResultsView(ListView):
    model = Project
    template_name = 'search_results.html'
    
    def get_queryset(self):
        proj=self.request.GET.get('proj')
        proj_list=Project.objects.filter(
            Q(name__icontains=proj) | Q(projectTag__icontains=proj)
        )
        proj_list1=Project.objects.filter(
            Q(department__icontains=proj)
        )
        proj_list2 = list(set(proj_list) & set(proj_list1))
        return proj_list2

class SearchPageView(TemplateView):
    template_name = 'searchbar.html'

search_results.html

{% extends 'main/base.html' %}
<html>

{%block content%}
<h1> Search Results </h1>

{% if proj %}
<ul>
    {% for project in proj_list2%}
     <li>
        {{project.name}}, {{project.department}}, {{project.projectTag}}
     </li>
    {% endfor %}
</ul>
{% else %}
<h2>sorry, no results</h2>
{% endif %}
{%endblock%}
</html>

每当我搜索肯定会产生结果的东西时,我都会得到“对不起,没有结果”。

谢谢你。请帮助我了解我的断开连接。更大的目标是添加不同的模型来查询(即不仅在项目中搜索,还可以按用户搜索)。

标签: htmldjangoviewsearchbar

解决方案


您正在检查错误的变量。元素的集合 is object_list, notprojproj_list2

{% if object_list %}
<ul>
    {% for project in object_list %}
     <li>
        {{project.name}}, {{project.department}}, {{project.projectTag}}
     </li>
    {% endfor %}
</ul>
{% else %}
    <h2>sorry, no results</h2>
{% endif %}

搜索也很奇怪,如果部门名称或标签匹配,您只会检索项目。我们可以将其简化为:

class SearchResultsView(ListView):
    model = Project
    template_name = 'search_results.html'
    
    def get_queryset(self):
        proj = self.request.GET.get('proj')
        return =Project.objects.filter(
            Q(name__icontains=proj) | Q(projectTag__icontains=proj),
            department__icontains=proj
        )

奇怪的是,部门名称例如应该匹配。如果您想匹配这三个中的任何一个,我们可以使用:

class SearchResultsView(ListView):
    model = Project
    template_name = 'search_results.html'
    
    def get_queryset(self):
        proj = self.request.GET.get('proj')
        return =Project.objects.filter(
            Q(name__icontains=proj) |
            Q(projectTag__icontains=proj) |
            Q(department__icontains=proj)
        )

推荐阅读