gpt4 book ai didi

python - 向 Django 应用程序添加简单搜索

转载 作者:行者123 更新时间:2023-11-29 14:23:12 25 4
gpt4 key购买 nike

所以我正在关注 this教程以便搜索我的一些模型。但是,缺少所提供内容的文档,作为 Django 的新手,我很困惑为了使这项工作缺少什么。

这就是我所拥有的:

编辑

修改了搜索模板以包含一个输入字段来获取查询。

我的项目.templates.search.html:

<form action="" method="get">
<label for="id_q">Search:</label>
<input id="id_q" name="q" type="text">
<input type="submit" value="Submit">

{% if found_entries %}
<p>You searched for "{{ query_string }}".</p>
<ul>
{% for i in found_entries %}
{{ i.uid }} {{ i.title }} {{ value|linebreaks }}
{% endfor %}
</ul>
{% endif %}

{% if query_string and not found_entries %}
<p>No results found.</p>
{% else %}
<p>Type a search query into the box above, and press "Submit" to search.</p>
{% endif %}

</form>

我的应用程序.models.py:

from django.db import models

class Book(models.Model):
uid = models.IntegerField(primary_key=True)
title = models.CharField(max_length=30)
class Meta:
db_table = u'books'

我的应用程序.search.py​​:

import re

from django.db.models import Q

def normalize_query(query_string,
findterms=re.compile(r'"([^"]+)"|(\S+)').findall,
normspace=re.compile(r'\s{2,}').sub):
''' Splits the query string in invidual keywords, getting rid of unecessary spaces
and grouping quoted words together.
Example:

>>> normalize_query(' some random words "with quotes " and spaces')
['some', 'random', 'words', 'with quotes', 'and', 'spaces']

'''
return [normspace(' ', (t[0] or t[1]).strip()) for t in findterms(query_string)]

def get_query(query_string, search_fields):
''' Returns a query, that is a combination of Q objects. That combination
aims to search keywords within a model by testing the given search fields.

'''
query = None # Query to search for every search term
terms = normalize_query(query_string)
for term in terms:
or_query = None # Query to search for a given term in each field
for field_name in search_fields:
q = Q(**{"%s__icontains" % field_name: term})
if or_query is None:
or_query = q
else:
or_query = or_query | q
if query is None:
query = or_query
else:
query = query & or_query
return query

我的应用程序.views.py:

from myapp.models import Book
from django.shortcuts import render_to_response
from django.template import RequestContext

def search(request):
query_string = ''
found_entries = None
search_fields=('uid')

if ('q' in request.GET) and request.GET['q'].strip():

query_string = request.GET['q']

entry_query = get_query(query_string, search_fields)

found_entries = Book.objects.filter(entry_query)

return render_to_response('search.html',
{ 'query_string': query_string, 'found_entries': found_entries },
context_instance=RequestContext(request))

我的项目.templates.search.html:

{% if found_entries %}
<p>You searched for "{{ query_string }}".</p>
<ul>
{% for i in found_entries %}
<li><a href="{{ q.get_absolute_url }}">{{ found_entries }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% if query_string and not found_entries %}
<p>No results found.</p>
{% else %}
<p>Type a search query into the box above, and press "Submit" to search.</p>
{% endif %}

我的项目.urls.py

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
url(r'^predictor/$', 'myapp.views.search'),
)

下面是我访问时的样子:http://localhost:8000/myapp/

图片:http://i.imgur.com/QFaWZ.png

谢谢!

最佳答案

您的模板中没有表单:您从未在页面上放置搜索框,所以为什么要显示一个?

看看 django documentation on using forms .


这将需要大量工作,但您没有使用 Django 的任何内置机制来创建表单。这样做会使您的代码更清晰(并且会更容易!)。

关于python - 向 Django 应用程序添加简单搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com