Integrējiet meklēšanas funkciju savā Django lietojumprogrammā, izmantojot šo soli pa solim sniegto rokasgrāmatu.

Meklēšanas funkcijas pievienošana savai tīmekļa lietojumprogrammai ļauj lietotājiem ērti pārvietoties tajā, meklējot to, ko viņi vēlas. Django nodrošina iebūvētu atbalstu meklēšanas funkcijas izveidei, izmantojot savus jaudīgos ORM un vaicājumu rīkus. Izmantojot Django, varat ieviest dažāda veida meklēšanu, tostarp atslēgvārdu meklēšanu, vienkāršu meklēšanu un izvērsto meklēšanu ar filtriem.

Meklēšanas funkcionalitātes ieviešana pakalpojumā Django

Django ļauj īstenot dažāda veida meklējumus ar iebūvētajām metodēm un funkcijām. Varat ieviest vienkāršu atslēgvārdu meklēšanu vai izvērsto meklēšanu, pamatojoties uz jūsu lietošanas gadījumu. Izvērstā meklēšana ir jāievieš, ja jums ir sarežģīta lietojumprogramma, piemēram, e-komercijas vietne, savukārt vienkārša atslēgvārdu meklēšana ir piemērota mazāk sarežģītiem projektiem.

Šajā rakstā izmantoto kodu var atrast vietnē GitHub un to varat izmantot bez maksas saskaņā ar MIT licenci.

instagram viewer

Ieviesiet vienkāršu atslēgvārdu meklēšanu programmā Django

Lai izveidotu vienkāršu meklēšanas funkciju, vispirms izveidojiet meklēšanas joslu. Jūs varat izveidot savu meklēšanas joslu navigācijas joslā. Bootstrap nodrošina gatavu navigācijas joslu ar meklēšanas joslu, un jūs varat viegli integrējiet Bootstrap un tā komponentus savā Django projektā. Izveidojiet savu meklēšanas joslu HTML failā, iestatiet formas metodi uz POSTĪT, un ievadiet ievades lauku a nosaukums atribūts kā šis:

<formāklasē="d-flex"lomu="Meklēt"metodi="POSTĪT">
 {% csrf_token %}
<ievade
class="form-control me-NN"
type="meklēt"
placeholder="Meklēt"
name="search_query"
obligāta aria-label="Meklēt"
 >
<poguklasē="btn btn-outline-success"veids="Iesniegt">Meklētpogu>
formā>

Iepriekš minētajā kodā ievades lauka nosaukums ir meklēšanas_vaicājums. Veidlapa izmanto Django CSRF marķieris uz novērstu CSRF uzbrukumus. Lai meklēšanas josla darbotos, veiciet šīs darbības.

Izveidojiet skatu meklēšanai

  • Atver savu views.py failu un importējiet savu modeli no modeļi.py fails:
no .modeļi imports Modeļa nosaukums
  • Izveidojiet skatīšanas funkciju meklēšanas funkcijai:
defmeklēšanas_funkcija(pieprasījums):
# Pārbaudiet, vai pieprasījums ir pasta pieprasījums.
ja pieprasījums.metode == 'POST':
# Izgūstiet lietotāja ievadīto meklēšanas vaicājumu
search_query = pieprasījums. POSTĪT['search_query']
# Filtrējiet savu modeli pēc meklēšanas vaicājuma
posts = Model.objects.filter (fieldName__contains=search_query)
atgriezties renderēt (pieprasīt, 'app/template_name.html', {'vaicājums':search_query, 'ziņas':posts})
cits:
atgriezties renderēt (pieprasīt, 'app/template_name.html',{})

Iepriekš minētā funkcija vispirms pārbauda, ​​vai klients sūta a POSTĪT pieprasījumu. Ja pārbaude ir izturēta, tā turpinās, lai izgūtu lietotāja meklēšanas vaicājuma vērtību šādi:

search_query = pieprasījums. POSTĪT['search_query']

Pēc pieprasījuma. POST['search_query'], ‘search_query’ jāaizstāj ar meklēšanas joslas ievades lauka nosaukumu.

Pēc lietotāja meklēšanas vaicājuma vērtības izgūšanas funkcija filtrē modeli ar to, izmantojot __satur metodi. The __satur metode nav reģistrjutīga. Lai izmantotu šo metodi, jums jāievēro šāds formāts:

fieldName__contains

Piemēram, ja vēlaties, lai lietotāji meklētu, pamatojoties uz modeļa lauku ar nosaukumu nosaukums, jums vajadzētu pārveidot savu kodu, lai tas izskatītos šādi:

name__contains=search_query

Visbeidzot, funkcija atveido veidni un nodod meklēšanas vaicājumu un filtrēto modeli kā kontekstu.

Tomēr, ja veidlapas metode nav a POSTĪT pieprasījumu, funkcija atveido veidni ar tukšu vārdnīcu un neapstrādā meklēšanas vaicājumu.

Izveidojiet veidni meklēšanas rezultātam

  • Izveidojiet HTML failu, lai atgrieztu meklēšanas rezultātus klienta pusē.
  • Izvadiet meklēšanas rezultātu lapā, lai lietotājs to varētu redzēt. Kodam jūsu HTML failā vajadzētu izskatīties šādi:
{% ja vaicājums %}
<div>
<div>
cilpa caur meklēšanas vaicājumu
{% ziņas ziņās %}
<div>
atgriezt meklēšanas vaicājumu
<lpp>{{post.title}}lpp>
div>
{% endfor %}
div>
div>
{% cits %}
atgriezt ziņojumu, ja lietotājs neievada meklēšanas vaicājumu
<h1>Lūdzu, ievadiet meklēšanas vaicājumuh1>
{% endif %}

Iepriekš minētā HTML veidne pārbauda, ​​vai lietotājs meklēšanas joslā ievada meklēšanas vaicājumu. Ja lietotājs ievada meklēšanas vaicājumu, a cilpai pārmeklē meklēšanas rezultātus un atgriež tos lietotājam. Ja nav meklēšanas vaicājuma, lietotājam tiek parādīts ziņojums, kurā jāievada meklēšanas vaicājums. Meklēšanas vaicājuma var nebūt, ja lietotājs dodas tieši uz URL, neaizpildot meklēšanas joslu, t.i., lietotājs ievada URL, piemēram, mywebsite.com/search tieši pārlūkprogrammā. Jums jāpārliecinās, ka lietojat Django veidnes mantojums savā HTML failā.

  • Modificējiet savu HTML kodu, lai parādītu kļūdas ziņojumu, ja nav meklēšanas rezultāta.
{% ja vaicājums %}
<div>
<div>
pārbaudiet, vai datu bāzē ir rezultāts
{% if posts %}
cilpu cauri meklēšanas vaicājumam, ja ir rezultāts
{% ziņas ziņās %}
<div>
atgriezt meklēšanas vaicājumu
<lpp>{{post.title}}lpp>
div>
{% endfor %}
atgriezt ziņojumu, ja nav atrasts neviens rezultāts.
{% cits %}
<h3>Meklēšanas rezultāti nav atrastih3>
{% endif %}
div>
div>
{% cits %}
<h1>Lūdzu, ievadiet meklēšanas vaicājumuh1>
{% endif %}

Jaunā HTML veidne nodrošina labāku lietotāja pieredzi. Tas ievieš nosacījumu paziņojumu, lai pārbaudītu, vai meklēšanas rezultāts ir pieejams datu bāzē. Ja ir, tiek parādīts meklēšanas rezultāts; pretējā gadījumā tas nosūta lietotājam kļūdas ziņojumu.

Konfigurējiet savus URL modeļus

  • Ja neesat to izdarījis, izveidojiet a urls.py failu savā lietotņu direktorijā.
  • Tavā urls.py, failu izveidojiet URL modeli jūsu meklēšanas lapai:
no django.urls imports ceļš
no. imports skatījumi

urlpatterns = [
ceļš ('Meklēt/', views.search_feature, name='meklēšanas skats'),
]

Iepriekš minētā programma vispirms importē ceļš funkcija un skatījumi failu, kas saistīts ar lietotni. Pēc tam tas izveido ceļu ar nosaukumu meklēšanas skats meklēšanas lapai.

  • Pievienojiet veidlapas darbību savai meklēšanas joslai. Darbības URL jānorāda uz URL ceļu, kas paredzēts meklēšanas skatam. Šajā gadījumā forma norāda uz meklēšanas skats.
<formāklasē="d-flex"lomu="Meklēt"metodi="POSTĪT"darbība="{% url 'search-view' %}">
<ievade
class="form-control me-NN"
type="meklēt"
placeholder="Meklēt kaut ko"
name="search_query"
obligāta aria-label="Meklēt"
>
<poguklasē="btn btn-outline-success"veids="Iesniegt">Meklētpogu>
formā>

Bez veidlapas darbības, kas norāda uz jūsu meklēšanas URL ceļu, jūsu meklēšanas funkcija nedarbosies. Atcerieties, ka jūsu meklēšanas URL ceļam ir jānorāda uz skatu Django, kas apstrādā jūsu meklēšanas funkcijas loģiku.

Izveidojiet meklēšanas līdzekli vairākiem modeļu laukiem

Ja vēlaties uzlabot savas tīmekļa lietotnes lietošanas pieredzi, varat ļaut lietotājiem meklēt pēc vairāk nekā viena lauka jūsu modelī. Piemēram, emuāra lietotnē jūs varētu vēlēties, lai lietotājs meklētu, pamatojoties uz ziņu virsrakstiem vai autoru vārdiem.

Lai ieviestu šo funkciju, jums vajadzētu izmantot J Django nodrošinātais objekts. Jums vajadzētu importēt J objekts tavā views.py šāds fails:

no django.db.models imports J

Pēc importēšanas J, jums vajadzētu mainīt skata funkciju šādi:

defsearch_post(pieprasījums):
ja pieprasījums.metode == 'POST':
search_query = pieprasījums. POSTĪT['search_query']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
atgriezties renderēt (pieprasīt, 'app/template_name.html', {'vaicājums':search_query, 'ziņas':posts})
cits:
atgriezties renderēt (pieprasīt, 'app/template_name.html',{})

Iepriekš minētajā programmā ziņas mainīgais filtrē modeli pēc ziņas nosaukuma vai autora vārda. Funkcija izmanto VAI operatoru — šajā gadījumā caurules simbolu —, lai veiktu filtru.

Lietotāju pieredzes uzlabošana, izmantojot meklēšanas funkciju

Meklēšanas funkcija jūsu tīmekļa lietojumprogrammā efektīvi uzlabo tās lietošanas pieredzi un vispārējo lietojamību. Izmantojot Django, jums ir jāizmanto tikai iebūvētās funkcijas, lai jūsu meklēšanas funkcija darbotos, nodrošinot ievērojamas priekšrocības jums un jūsu lietotājiem.