首页 > 解决方案 > django搜索页面抛出数据

问题描述

我在使搜索页面正常工作方面遇到了一些困难。问题是我的模板和视图在搜索页面上抛出数据。而且我的搜索按钮功能不起作用。如果有人可以看看并建议我缺少什么,将不胜感激。

提前致谢。

这就是我的搜索页面看起来有多丑 在此处输入图像描述

from django.shortcuts import render

# Create your views here.
#from django.shortcuts import render
from django.http import HttpResponse
from .mongodb_connection import mongosearch
from .models import AppModel
from django.db.models import Q


# Create your views here.

def search_view(request):

    model = AppModel
    template_name = 'search.html'
    results = []
    title_term = ""
    desc_term = ""
    search_term = ""
    url_term = ""
    titles = AppModel.objects.all()
    url = AppModel.objects.all()

    if 'search' in request.GET:
         search_term = request.GET['search']
         titles = titles.filter(
                 Q(title__icontains=search_term) |
                 Q(desc__icontains=search_term)
         )
         titles = AppModel.objects.all()
         results = mongosearch(title=title_term
                                #,desc = desc_term)
                               )
         print(results)

    context={
        'results':results,
    'search_term':search_term,
        'titles':titles
    }


    return render(request, 'search.html', context)

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
      integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<!doctype html>
<html>
<nav class="navbar navbar-light bg-light">
    <form class = "form-inline my-2  my-lg-1" method = "GET">
    <!--action = "{%url 'search_view'%"> -->
        <input
                class="form-control mr-sm-2"
                type="search"
                placeholder="Search"
                aria-label="Search"
                name = 'search'
                value = "{{request.GET.search}}">
        <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>

    </form>
    <br><br>
    {% if titles %}
        <ul class="messages">
            {%for i in titles %}
                <li class = "list-group-item">
                    {{i.title}}
                </li>
            {% endfor %}
        </ul>
    {% endif %}

</nav>

</html>

from pymongo import MongoClient
from pprint import pprint

def mongosearch(title=""):
    connection = MongoClient('localhost',27017)
    db = connection.djangodb
    collection = db.spiderCollection
    titles = collection.find()
    for title in titles:
        pprint(titles)

标签: pythondjango

解决方案


看起来您正在使用视图中的所有对象覆盖过滤的查询集。您需要删除多余的行:

     search_term = request.GET['search']
     titles = titles.filter(
             Q(title__icontains=search_term) |
             Q(desc__icontains=search_term)
     )
     titles = AppModel.objects.all()  # remove this line to not overwrite list
     results = mongosearch(title=title_term
                            #,desc = desc_term)
                           )
     print(results)

推荐阅读