red barret
red barret

Reputation: 91

django search page throwing data

I am facing bit of difficulty in making search page work. The problem is my template and view throwing data on search page. And my search button function doesnt works. If some one can have a look and advise what i m missing would be highly appreciated.

Thanks in advance.

this is how ugly my search page looks enter image description here

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)

Upvotes: 0

Views: 46

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47354

Looks like you are overwrite filtered queryset with all objects in your view. You need to remove redundant line:

     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)

Upvotes: 1

Related Questions