Добавление простого поиска к приложению Джанго

Таким образом, я следую это обучающая программа, чтобы искать некоторые мои модели. Однако есть отсутствие документации для того, что обеспечивается и как кто-то плохо знакомый с Джанго, я смущен относительно того, что отсутствует, чтобы сделать эту работу.

Таким образом, вот то, что я имею:

Править

Пересмотренный шаблон поиска, чтобы включать поле ввода, чтобы принести вопрос.

myproject.templates.search.html:

<form action="" method="get">

<input id="id_q" name="q" type="text">
<input type="submit" value="Submit">

{% if found_entries %}
    

You searched for "{{ query_string }}".

    {% for i in found_entries %} {{ i.uid }} {{ i.title }} {{ value|linebreaks }} {% endfor %}
{% endif %} {% if query_string and not found_entries %}

No results found.

{% else %}

Type a search query into the box above, and press "Submit" to search.

{% endif %} </form>

myapp.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'

myapp.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

myapp.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))

myproject.templates.search.html:

{% if found_entries %}
    

You searched for "{{ query_string }}".

{% endif %} {% if query_string and not found_entries %}

No results found.

{% else %}

Type a search query into the box above, and press "Submit" to search.

{% endif %}

myproject.urls.py

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

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

And here's what it looks like if I go to: http://localhost:8000/myapp/

image: http://i.imgur.com/QFaWZ.png

Спасибо!

0
nl ja de
What' s ваша точная проблема?
добавлено автор Thomas Orozco, источник
что происходит, когда вы делаете что-то как localhost:8000/myapp/? q=word???
добавлено автор JoseP, источник

2 ответы

В вашем шаблоне нет никакой формы: вы никогда не помещаете окно поиска на странице, итак, почему можно было бы показать?

Взгляните на документация django относительно использования форм.


Это собирается потребовать изрядного количества работы, но вы не используете ни одного встроенного механизма Джанго для создания форм. Выполнение так сделает вашего кодового уборщика (и будет легче!).

2
добавлено

Если вы смотрите на свой код (который я поощряю вас, делают), представление, на которое вы смотрите, myapp.views.search право? Рассмотрение вашего поиска функционирует, необходимо быть в состоянии видеть, что это изучает запрос. ДОБЕРИТЕСЬ для 'q' ключа, который является equivelant к получению 'q' элемента от строки запроса, таким образом, это - то, где это получает ваш поиск от.

Таким образом искать вас пошло бы, чтобы http://localhost:8000/myapp/? q=searchterm , где 'searchterm' относится к термину, вы - seaching для.

Как thomas, сказанный, хотя вы, вероятно, хотите создать форму, чтобы использовать эту функциональность также.

1
добавлено
да, это выглядит лучше, вы могли также написать форму django, чтобы сделать то же самое, если вы снова используете эту форму, но что you' ре, делающее, кажется прекрасным.
добавлено автор hkothari, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

SEO chat
SEO chat
5 476 участник(ов)

Чат про SEO. Speak Russian! Др.чаты: @ppcchat @uiux_chat @devschat @smmhell Работа: @seohr Канал: @seolife Аудит: tpv.sr/1QoBSBb Стата: tpv.sr/1QoBMrK/ Запрещено: - мат и брань - команды ботам - реклама, вакансии - религия, политика, наркота, крипта

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pgsql – PostgreSQL
pgsql – PostgreSQL
2 429 участник(ов)

Чат про PostgreSQL

Django
Django
1 931 участник(ов)

Полезная информация и правила: https://github.com/django-ru/faq Вакансии и резюме: @django_jobs Пофлудить идём сюда: @django_flood Статистика чата: combot.org/chat/-1001063854692

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

django_jobs
django_jobs
916 участник(ов)

Поиск и предложения работы (Django) Правила: https://t.me/django_jobs/4 Вакансии с тегом #job улетают в канал @django_jobs_board Вопросы к @amureki Основной чат @pydjango

Django
Django
733 участник(ов)

Веб-фреймворк для перфекционистов с дедлайнами. Наша группа на vk: https://vk.com/django_framework В Discord: https://discord.me/django_framework по всем вопросам @MechanisM

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community

django flood
django flood
71 участник(ов)

Флудилка джангистов Пока без правил