Integrer søgefunktionen i din Django-applikation ved hjælp af denne trin-for-trin guide.

Hvis du tilføjer en søgefunktion til din webapplikation, kan dine brugere nemt navigere i den ved at søge efter det, de vil have. Django giver indbygget support til at bygge en søgefunktion ved at bruge dets kraftfulde ORM og forespørgselsværktøjer. Med Django kan du implementere forskellige typer søgninger, herunder søgeordssøgninger, simple søgninger og avancerede søgninger med filtre.

Implementering af søgefunktionalitet i Django

Django giver dig mulighed for at implementere forskellige typer søgninger med dens indbyggede metoder og funktioner. Du kan implementere en simpel søgeordssøgning eller en avanceret søgning baseret på din use case. Du bør implementere en avanceret søgning, hvis du har en kompleks applikation, såsom et e-handelswebsted, mens en simpel søgeordssøgning er velegnet til mindre komplekse projekter.

Koden brugt i denne artikel kan findes på GitHub og er gratis for dig at bruge under MIT-licensen.

instagram viewer

Implementer en simpel søgeordssøgning i Django

For at oprette en simpel søgefunktion, bør du starte med at bygge din søgelinje. Du kan bygge din søgelinje i din navbar. Bootstrap giver en færdiglavet navbar med en søgelinje, og du kan nemt integrer Bootstrap og dets komponenter i dit Django-projekt. Opret din søgelinje i en HTML-fil, indstil formularmetoden til STOLPE, og giv indtastningsfeltet en navn egenskab som denne:

<formklasse="d-flex"rolle="Søg"metode="STOLPE">
 {% csrf_token %}
<input
class="form-control me-NN"
type="søg"
placeholder="Søg"
name="search_query"
påkrævet aria-label="Søg"
 >
<knapklasse="btn btn-outline-succes"type="Indsend">Søgknap>
form>

I ovenstående kode er navnet på indtastningsfeltet søgeforespørgsel. Formen gør brug af Djangos CSRF-token til forhindre CSRF-angreb. Følg disse trin for at få din søgelinje til at fungere.

Opret en visning til søgningen

  • Åben din views.py fil og importer din model fra models.py fil:
fra .modeller importere Modelnavn
  • Opret en visningsfunktion til søgefunktionen:
defsøgefunktion(anmodning):
# Tjek, om anmodningen er en postanmodning.
hvis request.method == 'STOLPE':
# Hent søgeforespørgslen indtastet af brugeren
search_query = anmodning. STOLPE['search_query']
# Filtrer din model efter søgeforespørgslen
posts = Model.objects.filter (fieldName__contains=search_query)
Vend tilbage gengive (anmodning, 'app/skabelon_navn.html', {'forespørgsel':search_query, 'indlæg':indlæg})
andet:
Vend tilbage gengive (anmodning, 'app/skabelon_navn.html',{})

Ovenstående funktion kontrollerer først, om klienten sender en STOLPE anmodning. Hvis kontrollen består, fortsætter den med at hente værdien af ​​brugerens søgeforespørgsel som denne:

search_query = anmodning. STOLPE['search_query']

På anmodning. POST['search_query'], 'search_query' skal erstattes med navnet på din søgelinjes inputfelt.

Efter at have hentet værdien af ​​brugerens søgeforespørgsel, filtrerer funktionen modellen med den ved at bruge __indeholder metode. Det __indeholder metoden er ufølsom over for store og små bogstaver. For at bruge denne metode skal du følge dette format:

fieldName__ indeholder

For eksempel, hvis du ønsker, at dine brugere skal søge baseret på et modelfelt kaldet navn, bør du ændre din kode til at se sådan ud:

name__contains=search_query

Til sidst gengiver funktionen en skabelon og sender søgeforespørgslen og den filtrerede model som kontekst.

Men hvis formularens metode ikke er en STOLPE anmodning, gengiver funktionen en skabelon med en tom ordbog og behandler ikke søgeforespørgslen.

Opret en skabelon til søgeresultatet

  • Opret en HTML-fil for at returnere dine søgeresultater til klientsiden.
  • Udskriv søgeresultatet på siden, så brugeren kan se det. Koden i din HTML-fil skal se sådan ud:
{% hvis forespørgsel %}
<div>
<div>
gå gennem søgeforespørgslen
{% for indlæg i indlæg %}
<div>
returnere søgeforespørgsel
<s>{{post.title}}s>
div>
{% endfor %}
div>
div>
{% andet %}
returnere en besked, hvis brugeren ikke indtaster en søgeforespørgsel
<h1>Indtast venligst en søgeforespørgselh1>
{% Afslut Hvis %}

Ovenstående HTML-skabelon tjekker, om brugeren indtaster en søgeforespørgsel i søgefeltet. Hvis brugeren indtaster en søgeforespørgsel, a for sløjfe sløjfer over søgeresultaterne og returnerer dem til brugeren. Når der ikke er nogen søgeforespørgsel, vises en meddelelse til brugeren om at indtaste en søgeforespørgsel. Et tilfælde, hvor der muligvis ikke er nogen søgeforespørgsel, er, hvis din bruger går direkte til URL'en uden at udfylde søgefeltet, dvs. din bruger indtaster en URL som f.eks. mywebsite.com/search direkte ind i browseren. Du bør sikre dig, at du bruger Djangos skabelonarv i din HTML-fil.

  • Rediger din HTML-kode for at returnere en fejlmeddelelse, hvis der ikke er noget søgeresultat.
{% hvis forespørgsel %}
<div>
<div>
kontrollere, om der er et resultat i databasen
{% if posts %}
gå gennem søgeforespørgslen, hvis der er et resultat
{% for indlæg i indlæg %}
<div>
returnere søgeforespørgsel
<s>{{post.title}}s>
div>
{% endfor %}
returnere en besked, hvis der ikke er nogen resultater fundet.
{% andet %}
<h3>Ingen søgeresultater fundeth3>
{% Afslut Hvis %}
div>
div>
{% andet %}
<h1>Indtast venligst en søgeforespørgselh1>
{% Afslut Hvis %}

Den nye HTML-skabelon giver mulighed for en bedre brugeroplevelse. Den introducerer en betinget erklæring for at kontrollere, om et søgeresultat er tilgængeligt i databasen. Hvis der er, viser den søgeresultatet; ellers sender den brugeren en fejlmeddelelse.

Konfigurer dine URL-mønstre

  • Hvis du ikke har gjort dette, skal du oprette en urls.py fil i din app-mappe.
  • I din urls.py, fil opret et URL-mønster til din søgeside:
fra django.urls importere sti
fra. importere visninger

urlpatterns = [
sti('Søg/', views.search_feature, navn='søgevisning'),
]

Programmet ovenfor importerer først sti funktion og visninger fil relateret til appen. Derefter opretter den en sti med navnet søge-visning for søgesiden.

  • Tilføj en formularhandling til din søgelinje. Handlings-URL'en skal pege på URL-stien, der er dedikeret til søgevisningen. I dette tilfælde peger formularen på søge-visning.
<formklasse="d-flex"rolle="Søg"metode="STOLPE"handling="{% url 'search-view' %}">
<input
class="form-control me-NN"
type="søg"
placeholder="Søg efter noget"
name="search_query"
påkrævet aria-label="Søg"
>
<knapklasse="btn btn-outline-succes"type="Indsend">Søgknap>
form>

Uden en formularhandling, der peger på din søge-URL-sti, vil din søgefunktion ikke fungere. Husk, at din søge-URL-sti skal pege på Django-visningen, der håndterer logikken i din søgefunktion.

Opret en søgefunktion til flere modelfelter

Hvis du vil forbedre brugeroplevelsen af ​​din webapp, kan du lade dine brugere søge efter mere end ét felt i din model. I en blog-app vil du måske have, at din bruger skal søge baseret på indlægstitler eller forfatternavne.

For at implementere denne funktion skal du bruge Q objekt leveret af Django. Du bør importere Q genstand i din views.py fil som denne:

fra django.db.modeller importere Q

Efter import Q, bør du ændre din visningsfunktion på denne måde:

defsøg_indlæg(anmodning):
hvis request.method == 'STOLPE':
search_query = anmodning. STOLPE['search_query']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
Vend tilbage gengive (anmodning, 'app/skabelon_navn.html', {'forespørgsel':search_query, 'indlæg':indlæg})
andet:
Vend tilbage gengive (anmodning, 'app/skabelon_navn.html',{})

I programmet ovenfor er indlæg variabel filtrerer modellen efter enten posttitlen eller forfatterens navn. Funktionen bruger ELLER operatør – i dette tilfælde et rørsymbol – for at udføre filteret.

Forbedring af brugeroplevelsen med en søgefunktion

En søgefunktion i din webapplikation forbedrer effektivt dens brugeroplevelse og overordnede brugervenlighed. Med Django behøver du kun at udnytte de indbyggede funktioner for at få din søgefunktion til at fungere, hvilket giver betydelige fordele for dig og dine brugere.