Поиск по сайту:

Все для всего всегда (Будда).

Как создать базовый поиск для сайта Django?

4 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
11 апреля 2021
Как установить и подключиться к интерфейсу администратора Django
Конкретный контент любого сайта обычно извлекается пользователями через поиск Google, Yandex или другие поисковые системы. Однако, если этот вариант поиска реализован на веб-сайте, пользователи могут легко найти желаемый контент на сайте без использования поиска Google. Еще одно преимущество добавления опции поиска на веб-сайт заключается в том, что разработчик может правильно управлять результатами поиска. Это означает, что он может контролировать, какое содержимое сайта будет отображаться или нет. В этой статье будет показан процесс реализации базового поиска на сайте Django.

 

Предпосылки:

Перед тем, как практиковать сценарий этого руководства, вам необходимо выполнить следующие задачи:

  1. Установите Django версии 3+ на Ubuntu 20+ (желательно)
  2. Создайте проект Django
  3. Запустите сервер Django, чтобы проверить, работает ли сервер правильно или нет.

 

Настройте приложение Django:

Выполните следующую команду, чтобы создать приложение Django с именем searchchapp.

$ python3 manage.py startapp searchapp

Выполните следующую команду, чтобы создать пользователя для доступа к базе данных Django. Если вы создали пользователя раньше, вам не нужно запускать команду.

$ python3 manage.py createsuperuser

Добавьте имя приложения в часть INSTALLED_APP файла settings.py.

INSTALLED_APPS = [

…..

'searchapp'

]

Создайте папку с именем templates внутри папки searchchapp и укажите местоположение шаблона приложения в части TEMPLATES файла settings.py.

TEMPLATES = [

{

….

'DIRS': ['/home/fahmida/django_pro/searchapp/templates'],

….

},

]

Создать модели:

Измените файл models.py с помощью следующего сценария. Здесь были определены два класса для создания двух реляционных таблиц с именами booktypes и books. Поле типа таблицы книг – это внешний ключ, который появится из таблицы типов книг.

 

models.py

# Импортировать необходимые модули 
from django.db import models 
from django.urls import  reverse
# Создать модель 
class Booktype(models.Model):

    btype = models.CharField(max_length=100, unique=True)

    class Meta:

        ordering=('btype',) 
# Создайте модель gor book 
class Book(models.Model):

    book_name = models.CharField(max_length=150)

    author_name = models.CharField(max_length=150)

    type = models.ForeignKey(Booktype, on_delete=models.CASCADE)

    price = models.FloatField()

    publication = models.CharField(max_length=100)


    class Meta:

        ordering=('book_name',)

    def __str__(self):

        return self.book_name

    def get_url(self):

       return reverse('book_detail', args=[self.id])

Создать шаблоны для поиска:

Для создания функции поиска, показанной в этой статье, вам потребуются три файла HTML. Это book_list.html, book_detail.html и search.html. Book_list.html отобразит все записи из таблицы books. Book_detail.html отобразит подробную информацию о конкретной книге. Search.html отобразит результат поиска после отправки формы поиска.

Читать  Как установить Kubernetes на единый узел Ubuntu

 

book_list.html

<html>

<head>

<title>Book List</title>

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

</head>

<body>

<div class="container">

<div>

<br/>

<form action="{% url 'search' %}" class="form-inline" method="get">

<div class="form-group mb-8">

<h1>{% if type %}{{ type.name }}{% else %} Список книг {% endif %}</h1>

</div>

<div class="form-group mx-sm-3 mb-2">

<label for="" class="sr-only">поиск</label>

<input name="search" type="" class="form-control" id="" placeholder="Keyword">

</div>

<button type="submit" class="btn btn-success btn-lg mb-2">Поиск</button>

</form>

<br/>

{% for x in book %}

<h3> <a href="{{ x.get_url }}">{{x.book_name}}</a></h3>

<p class="lead">by {{x.author_name}}</p>

<p class="lead">${{x.price}}</p>

<hr>

{% endfor %}

</div>

</div>

</body>

</html>

book_detail.html

<html>

<head>

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<title>{{book.book_name}}</title>

</head>

<body>

<div class="container">

<br/><br/>

<h2 class="text-center"> {{book.book_name}}</h2>

<hr>

<p class="lead">Автор: {{book.author_name}} </p>

<p class="lead">Тип: {{type}} </p>

<p class="lead">Публикация: {{book.publication}} </p>

<p class="lead">Цена: ${{book.price}} </p>

<form action="{% url 'book_list' %}" class="form-inline" method="get">

<button type="submit" class="btn btn-primary btn-lg mb-2">Назад</button>

</form>

</div>

</body>

</html>

search.html

<html>

<head>

<title>Search Result</title>

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

</head>

<body>

<br/></br/>

<div class="container">

<div class="col-md-8 offset-md-2">

{% if query %}

<h2>

{% with results.count as total_results %}

Found {{ total_results }} result{{ total_results|pluralize }}

{% endwith %}

</h2>

{% for c in results %}

<a href="{{c.get_url}}"><h3>{{c.book_name}}</h3></a>

<h3>{{c.author_name}}</h3>

{% empty %}

<h3>No results found.</h3>

{% endfor %}

{% endif %}

<form action="{% url 'book_list' %}" class="form-inline" method="get">

<button type="submit" class="btn btn-primary btn-lg mb-2">Назад</button>

</form>

</div>

</div>

</body>

<html>

Создание функций просмотра:

Измените файл views.py с помощью следующего сценария. В скрипте определены три функции. Функция book_list() отобразит файл book_list.html. Функция book_detail() отобразит файл book_detail.html. Функция search() будет искать записи на основе данных, отправленных формой поиска, и отображать результат в search.html.

 

views.py

# Импортировать необходимые модули

from django.shortcuts import render,get_object_or_404

from .models import  Book, Booktype

from django.db.models import Q

# Определите функцию для отображения всех книг

def book_list(request):

book = Book.objects.all()

return render(request, 'book_list.html', {'book': book })

# Определите функцию для отображения конкретной книги

def book_detail(request,id):

book = get_object_or_404(Book, id=id)

types = Booktype.objects.all()

t = types.get(id=book.type.id)

return render(request, 'book_detail.html', {'book': book, 'type': t.btype})

# Определить функцию для поиска книги

def search(request):

results = []

if request.method == "GET":

query = request.GET.get('search')

if query == '':

query = 'None'

results = Book.objects.filter(Q(book_name__icontains=query) | Q(author_name__icontains=query) | Q(price__icontains=query) )

return render(request, 'search.html', {'query': query, 'results': results})

Задайте пути для вызова функций просмотра:

Измените файл urls.py проекта Django с помощью следующего скрипта. В скрипте определены четыре пути. Путь admin/ используется для открытия административной панели Django. Пустой путь (”) используется для вызова функции book_list (). Путь ‘<int: id>/’ используется для вызова функции book_detail(). Путь search/ используется для вызова функции search().

 

urls.py

# Импортировать админ-модуль

from django.contrib import admin

# Импортировать модуль пути

from django.urls import path

# Импортировать представление

from searchapp import views

# Определить пути

urlpatterns = [

path('admin/', admin.site.urls),

path('', views.book_list, name='book_list'),

path('/', views.book_detail, name='book_detail'),

path('search/', views.search, name='search'),

]

Запустите приложение из браузера:

Выполните следующую команду, чтобы запустить сервер Django.

$ python3 manage.py runserver

Запустите следующий URL-адрес из любого браузера, чтобы отобразить список книг из таблицы.

http://localhost:8000

 

Если пользователь щелкнет ссылку «PHP и MySQL для динамических веб-сайтов», подробности этой книги появятся в браузере.

Если пользователь ищет слово, физика в браузере, то в браузере отобразится следующий результат поиска.

Читать  Как установить R на Ubuntu 20.04

 

Заключение:

Приложение Django с опцией базового поиска было реализовано в этой статье с использованием таблиц базы данных. Новые разработчики Django смогут реализовать функцию поиска на своем веб-сайте после прочтения этого руководства.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Поделиться в соц. сетях:
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close