【问题标题】:django search page throwing datadjango搜索页面抛出数据
【发布时间】:2020-02-09 18:42:47
【问题描述】:

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

提前致谢。

这就是我的搜索页面看起来有多丑

  • 以下是我的观点:
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)

  • 以下 html 页面
<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>

  • mongo_connection
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)

【问题讨论】:

    标签: python django


    【解决方案1】:

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

         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)
    

    【讨论】:

    • 感谢您指出这一点,-重新加载的页面没有变化,仍然吐出页面上的整个数据集-但是当我现在搜索某些内容时,它重新加载页面并且整个表格消失了/消失。有什么想法还需要做什么?
    • @redbarret 抱歉没有其他想法。可能您输入了无效的搜索请求?并且在 DB 中没有符合此过滤器的记录?如果将print(titles) 添加到视图中会怎样?
    • 是的,我在上面添加的 mongodb_connection.py 中添加了 pprint(titles)。你是这个意思吗?
    • 我输入了有效数据,我的 .html 文件看起来是否正确?我是前端的新手,所以很挣扎。
    • @redbarret html 看起来不错。应该是results = mongosearch(title=search_term) 还是results = mongosearch(title=title_term)
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 2018-03-05
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2013-07-30
    相关资源
    最近更新 更多