Integrujte funkci vyhledávání do své aplikace Django pomocí tohoto podrobného průvodce.
Přidání vyhledávací funkce do vaší webové aplikace umožní vašim uživatelům snadno se v ní pohybovat hledáním toho, co chtějí. Django poskytuje vestavěnou podporu pro vytváření vyhledávací funkce pomocí svých výkonných ORM a dotazovacích nástrojů. S Django můžete implementovat různé typy vyhledávání, včetně vyhledávání klíčových slov, jednoduchého vyhledávání a pokročilého vyhledávání s filtry.
Implementace vyhledávací funkce v Django
Django vám umožňuje implementovat různé typy vyhledávání pomocí svých vestavěných metod a funkcí. Můžete implementovat jednoduché vyhledávání klíčových slov nebo pokročilé vyhledávání na základě vašeho případu použití. Pokročilé vyhledávání byste měli implementovat, pokud máte složitou aplikaci, jako je web elektronického obchodu, zatímco jednoduché vyhledávání pomocí klíčových slov je vhodné pro méně složité projekty.
Kód použitý v tomto článku lze nalézt na GitHub a můžete jej používat zdarma pod licencí MIT.
Implementujte jednoduché vyhledávání klíčových slov v Django
Chcete-li vytvořit jednoduchou funkci vyhledávání, měli byste začít vytvořením vyhledávacího panelu. Vyhledávací panel si můžete vytvořit v navigační liště. Bootstrap poskytuje hotový navigační panel s vyhledávacím pruhem a můžete snadno integrujte Bootstrap a jeho komponenty do svého projektu Django. Vytvořte vyhledávací panel v souboru HTML, nastavte metodu formuláře na POŠTA, a zadejte vstupní pole a název atribut takto:
<formulářtřída="d-flex"role="Vyhledávání"metoda="POŠTA">
{% csrf_token %}
<vstup
class="form-control me-NN"
type="search"
placeholder="Hledat"
name="search_query"
požadované aria-label="Hledat"
>
<knoflíktřída="btn btn-outline-success"typ="Předložit">Vyhledáváníknoflík>
formulář>
Ve výše uvedeném kódu je název vstupního pole vyhledávací_dotaz. Formulář využívá Djangoův CSRF token na zabránit CSRF útokům. Chcete-li, aby vyhledávací pole fungovalo, postupujte takto.
Vytvořte zobrazení pro vyhledávání
- Otevři tvůj views.py a importujte svůj model z modely.py soubor:
z .modely import Jméno modelu
- Vytvořte funkci zobrazení pro funkci vyhledávání:
defvyhledávací_funkce(žádost):
# Zkontrolujte, zda je žádost žádostí o příspěvek.
-li request.metoda == 'POŠTA':
# Získejte vyhledávací dotaz zadaný uživatelem
search_query = požadavek. POŠTA['hledací_dotaz']
# Filtrujte svůj model podle vyhledávacího dotazu
posts = Model.objects.filter (fieldName__contains=search_query)
vrátit se vykreslit (žádost, 'app/template_name.html', {'dotaz':hledací_dotaz, 'příspěvky':příspěvky})
jiný:
vrátit se vykreslit (žádost, 'app/template_name.html',{})
Výše uvedená funkce nejprve zkontroluje, zda klient posílá a POŠTA žádost. Pokud kontrola projde, bude načtena hodnota vyhledávacího dotazu uživatele takto:
search_query = požadavek. POŠTA['hledací_dotaz']
V žádosti. POST['vyhledávací_dotaz'], ‘hledací_dotaz’ by měl být nahrazen názvem vstupního pole vyhledávacího pole.
Po načtení hodnoty vyhledávacího dotazu uživatele funkce filtruje model s ní pomocí __obsahuje metoda. The __obsahuje metoda nerozlišuje velká a malá písmena. Chcete-li použít tuto metodu, měli byste dodržovat tento formát:
fieldName__contains
Pokud například chcete, aby vaši uživatelé vyhledávali na základě pole modelu s názvem název, měli byste upravit svůj kód, aby vypadal takto:
name__contains=search_query
Nakonec funkce vykreslí šablonu a předá vyhledávací dotaz a filtrovaný model jako kontext.
Pokud však metoda formuláře není a POŠTA požadavek, funkce vykreslí šablonu s prázdným slovníkem a nezpracuje vyhledávací dotaz.
Vytvořte šablonu pro výsledek hledání
- Chcete-li vrátit výsledky vyhledávání na stranu klienta, vytvořte soubor HTML.
- Výstup výsledku vyhledávání na stránku, aby jej uživatel viděl. Kód ve vašem HTML souboru by měl vypadat takto:
{% v případě dotazu %}
<div>
<div>
procházet vyhledávací dotaz
{% za příspěvek v příspěvcích %}
<div>
vrátit vyhledávací dotaz
<p>{{post.title}}p>
div>
{% endfor %}
div>
div>
{% else %}
vrátit zprávu, pokud uživatel nezadá vyhledávací dotaz
<h1>Zadejte vyhledávací dotazh1>
{% endif %}
Výše uvedená šablona HTML kontroluje, zda uživatel zadá vyhledávací dotaz do vyhledávacího pole. Pokud uživatel zadá vyhledávací dotaz, a pro smyčku smyčky přes výsledky vyhledávání a vrátí je uživateli. Pokud neexistuje žádný vyhledávací dotaz, zobrazí se uživateli zpráva, aby zadal vyhledávací dotaz. Případ, kdy nemusí existovat žádný vyhledávací dotaz, je, když váš uživatel přejde přímo na adresu URL bez vyplňování vyhledávacího pole, tj. uživatel zadá adresu URL, např. mywebsite.com/search přímo do prohlížeče. Měli byste se ujistit, že používáte Dědictví Django šablony ve vašem HTML souboru.
- Upravte svůj HTML kód tak, aby vrátil chybovou zprávu, pokud není výsledek hledání.
{% v případě dotazu %}
<div>
<div>
zkontrolujte, zda je v databázi výsledek
{% if posts %}
procházet vyhledávací dotaz, pokud existuje výsledek
{% za příspěvek v příspěvcích %}
<div>
vrátit vyhledávací dotaz
<p>{{post.title}}p>
div>
{% endfor %}
vrátit zprávu, pokud nebyly nalezeny žádné výsledky.
{% else %}
<h3>Nebyly nalezeny žádné výsledky vyhledáváníh3>
{% endif %}
div>
div>
{% else %}
<h1>Zadejte vyhledávací dotazh1>
{% endif %}
Nová HTML šablona umožňuje lepší uživatelský zážitek. Zavádí podmíněný příkaz ke kontrole, zda je v databázi dostupný výsledek hledání. Pokud existuje, zobrazí výsledek hledání; jinak odešle uživateli chybovou zprávu.
Nakonfigurujte si vzory adres URL
- Pokud jste to neudělali, vytvořte soubor urls.py soubor v adresáři aplikace.
- Ve vašem urls.py, soubor vytvořte vzor adresy URL pro vaši vyhledávací stránku:
z django.urls import cesta
z. import pohledy
urlpatterns = [
cesta('Vyhledávání/', views.search_feature, name='search-view'),
]
Výše uvedený program nejprve importuje cesta funkce a pohledy soubor související s aplikací. Poté vytvoří cestu s názvem vyhledávání-zobrazení pro stránku vyhledávání.
- Přidejte akci formuláře do vyhledávacího pole. Adresa URL akce by měla ukazovat na cestu URL vyhrazenou pro zobrazení vyhledávání. V tomto případě formulář ukazuje na vyhledávání-zobrazení.
<formulářtřída="d-flex"role="Vyhledávání"metoda="POŠTA"akce="{% url 'search-view' %}">
<vstup
class="form-control me-NN"
type="search"
placeholder="Hledat něco"
name="search_query"
požadované aria-label="Hledat"
>
<knoflíktřída="btn btn-outline-success"typ="Předložit">Vyhledáváníknoflík>
formulář>
Bez akce formuláře ukazující na cestu URL pro vyhledávání nebude funkce vyhledávání fungovat. Pamatujte, že vaše vyhledávací adresa URL musí ukazovat na zobrazení Django, které zpracovává logiku vaší vyhledávací funkce.
Vytvořte funkci vyhledávání pro více polí modelu
Pokud chcete zlepšit uživatelský dojem z vaší webové aplikace, můžete uživatelům umožnit vyhledávat podle více než jednoho pole ve vašem modelu. Například v blogové aplikaci můžete chtít, aby váš uživatel vyhledával na základě názvů příspěvků nebo jmen autorů.
Chcete-li implementovat tuto funkci, měli byste použít Q objekt poskytl Django. Měli byste importovat Q objekt ve vašem views.py soubor takto:
z django.db.modely import Q
Po importu Q, měli byste upravit funkci zobrazení takto:
defhledat_příspěvek(žádost):
-li request.metoda == 'POŠTA':
search_query = požadavek. POŠTA['hledací_dotaz']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
vrátit se vykreslit (žádost, 'app/template_name.html', {'dotaz':hledací_dotaz, 'příspěvky':příspěvky})
jiný:
vrátit se vykreslit (žádost, 'app/template_name.html',{})
Ve výše uvedeném programu je příspěvky proměnná filtruje model buď podle názvu příspěvku, nebo podle jména autora. Funkce využívá NEBO operátor – v tomto případě symbol potrubí – pro provedení filtru.
Zlepšení uživatelského dojmu pomocí funkce vyhledávání
Funkce vyhledávání ve vaší webové aplikaci efektivně zlepšuje její uživatelskou zkušenost a celkovou použitelnost. S Django stačí využít vestavěné funkce, aby vaše vyhledávací funkce fungovala a poskytovala významné výhody vám i vašim uživatelům.