Integrasikan fitur pencarian ke dalam aplikasi Django Anda menggunakan panduan langkah demi langkah ini.

Menambahkan fitur pencarian ke aplikasi web Anda memungkinkan pengguna menavigasinya dengan mudah dengan mencari apa yang mereka inginkan. Django menyediakan dukungan bawaan untuk membuat fitur pencarian dengan menggunakan alat ORM dan kueri yang kuat. Dengan Django, Anda dapat menerapkan berbagai jenis pencarian, termasuk pencarian kata kunci, pencarian sederhana, dan pencarian lanjutan dengan filter.

Menerapkan Fungsi Pencarian di Django

Django membolehkan anda untuk mengimplementasikan berbagai jenis pencarian dengan metode dan fungsi bawaannya. Anda dapat menerapkan pencarian kata kunci sederhana atau pencarian lanjutan berdasarkan kasus penggunaan Anda. Anda harus menerapkan pencarian lanjutan jika Anda memiliki aplikasi yang rumit, seperti situs web e-niaga, sedangkan pencarian kata kunci sederhana cocok untuk proyek yang tidak terlalu rumit.

Kode yang digunakan dalam artikel ini dapat ditemukan di GitHub dan gratis untuk Anda gunakan di bawah lisensi MIT.

instagram viewer

Terapkan Pencarian Kata Kunci Sederhana di Django

Untuk membuat fitur pencarian sederhana, Anda harus mulai dengan membangun bilah pencarian Anda. Anda dapat membangun bilah pencarian di navbar Anda. Bootstrap menyediakan navbar yang sudah jadi dengan bilah pencarian, dan Anda dapat dengan mudah integrasikan Bootstrap dan komponennya ke dalam proyek Django Anda. Buat bilah pencarian Anda dalam file HTML, setel metode formulir ke POS, dan beri field input a nama atribut seperti ini:

<membentukkelas="d-fleksibel"peran="mencari"metode="POS">
 {% csrf_token %}
<memasukkan
kelas = "bentuk-kontrol saya-NN"
ketik="cari"
placeholder="Cari"
nama="search_query"
diperlukan aria-label="Cari"
 >
<tombolkelas="btn btn-garis besar-sukses"jenis="kirim">Mencaritombol>
membentuk>

Pada kode di atas, nama field inputnya adalah search_query. Bentuk memanfaatkan Token CSRF Django ke mencegah serangan CSRF. Untuk membuat bilah pencarian Anda berfungsi, ikuti langkah-langkah ini.

Buat Tampilan untuk Pencarian

  • Bukalah views.py file dan impor model Anda dari model.py mengajukan:
dari .model impor Nama model
  • Buat fungsi tampilan untuk fitur pencarian:
defsearch_feature(meminta):
# Periksa apakah permintaannya adalah permintaan pos.
jika permintaan.metode == 'POS':
# Ambil permintaan pencarian yang dimasukkan oleh pengguna
search_query = permintaan. POS['search_query']
# Saring model Anda dengan permintaan pencarian
posts = Model.objects.filter (fieldName__contains=search_query)
kembali memberikan (permintaan, 'app/template_name.html', {'pertanyaan':search_query, 'postingan':posting})
kalau tidak:
kembali memberikan (permintaan, 'app/template_name.html',{})

Fungsi di atas pertama-tama memeriksa apakah klien mengirim a POS meminta. Jika pemeriksaan lolos, ia melanjutkan untuk mengambil nilai kueri penelusuran pengguna seperti ini:

search_query = permintaan. POS['search_query']

Dalam permintaan. POST['search_query'], 'permintaan_penelusuran' harus diganti dengan nama kolom input bilah pencarian Anda.

Setelah mengambil nilai kueri penelusuran pengguna, fungsi memfilter model dengan menggunakan __mengandung metode. Itu __mengandung metode tidak peka huruf besar-kecil. Untuk menggunakan metode ini, Anda harus mengikuti format ini:

fieldName__berisi

Misalnya, jika Anda ingin pengguna mencari berdasarkan bidang model yang disebut nama, Anda harus memodifikasi kode agar terlihat seperti ini:

name__contains=search_query

Terakhir, fungsi merender template dan meneruskan kueri penelusuran dan model yang difilter sebagai konteks.

Namun, jika metode formulir bukan a POS permintaan, fungsi merender template dengan kamus kosong dan tidak memproses permintaan pencarian.

Buat Template untuk Hasil Pencarian

  • Buat file HTML untuk mengembalikan hasil pencarian Anda ke sisi klien.
  • Keluarkan hasil pencarian pada halaman untuk dilihat pengguna. Kode dalam file HTML Anda akan terlihat seperti ini:
{% jika kueri %}
<div>
<div>
loop melalui permintaan pencarian
{% untuk postingan di postingan %}
<div>
kembali permintaan pencarian
<P>{{post.title}}P>
div>
{% akhir untuk %}
div>
div>
{% kalau tidak %}
mengembalikan pesan jika pengguna tidak memasukkan permintaan pencarian
<h1>Masukkan kueri penelusuranh1>
{% berakhir jika %}

Template HTML di atas memeriksa apakah pengguna memasukkan kueri penelusuran di bilah penelusuran. Jika pengguna memasukkan permintaan pencarian, a untuk putaran mengulang hasil pencarian dan mengembalikannya ke pengguna. Ketika tidak ada kueri penelusuran, sebuah pesan ditampilkan bagi pengguna untuk memasukkan kueri penelusuran. Kasus di mana mungkin tidak ada kueri penelusuran adalah jika pengguna Anda langsung membuka URL tanpa mengisi bilah penelusuran, yaitu, pengguna Anda memasukkan URL seperti mywebsite.com/search langsung ke browser. Anda harus memastikan bahwa Anda menggunakan Pewarisan cetakan Django dalam berkas HTML Anda.

  • Ubah kode HTML Anda untuk mengembalikan pesan kesalahan jika tidak ada hasil pencarian.
{% jika kueri %}
<div>
<div>
periksa apakah ada hasil di database
{% jika memposting %}
loop melalui permintaan pencarian jika ada hasil
{% untuk postingan di postingan %}
<div>
kembali permintaan pencarian
<P>{{post.title}}P>
div>
{% akhir untuk %}
kembali pesan jika tidak ada hasil yang ditemukan.
{% kalau tidak %}
<h3>Tidak ada hasil pencarian yang ditemukanh3>
{% berakhir jika %}
div>
div>
{% kalau tidak %}
<h1>Masukkan kueri penelusuranh1>
{% berakhir jika %}

Template HTML baru memungkinkan pengalaman pengguna yang lebih baik. Ini memperkenalkan pernyataan bersyarat untuk memeriksa apakah hasil pencarian tersedia di database. Jika ada, ini akan menampilkan hasil pencarian; jika tidak, itu mengirimkan pesan kesalahan kepada pengguna.

Konfigurasikan Pola URL Anda

  • Jika Anda belum melakukan ini, buat urls.py file di direktori aplikasi Anda.
  • Di Anda urls.py, file buat pola URL untuk halaman pencarian Anda:
dari django.urls impor jalur
dari. impor pandangan

pola url = [
jalur('mencari/', tampilan.fitur_penelusuran, nama='tampilan-penelusuran'),
]

Program di atas pertama-tama mengimpor file jalur fungsi dan pandangan file yang terkait dengan aplikasi. Kemudian itu membuat jalur bernama pencarian-tampilan untuk halaman pencarian.

  • Tambahkan tindakan formulir ke bilah pencarian Anda. URL tindakan harus mengarah ke jalur URL yang dikhususkan untuk tampilan penelusuran. Dalam hal ini, formulir menunjuk ke pencarian-tampilan.
<membentukkelas="d-fleksibel"peran="mencari"metode="POS"tindakan="{% url 'tampilan-penelusuran' %}">
<memasukkan
kelas = "bentuk-kontrol saya-NN"
ketik="cari"
placeholder="Mencari sesuatu"
nama="search_query"
diperlukan aria-label="Cari"
>
<tombolkelas="btn btn-garis besar-sukses"jenis="kirim">Mencaritombol>
membentuk>

Tanpa tindakan formulir yang mengarah ke jalur URL pencarian Anda, fitur pencarian Anda tidak akan berfungsi. Ingatlah bahwa jalur URL pencarian Anda harus mengarah ke tampilan Django yang menangani logika fitur pencarian Anda.

Buat Fitur Pencarian untuk Beberapa Bidang Model

Jika Anda ingin meningkatkan pengalaman pengguna aplikasi web, Anda dapat mengizinkan pengguna menelusuri lebih dari satu bidang dalam model Anda. Misalnya, di aplikasi blog, Anda mungkin ingin pengguna mencari berdasarkan judul posting atau nama penulis.

Untuk menerapkan fitur ini, Anda harus menggunakan Q objek yang disediakan oleh Django. Anda harus mengimpor Q objek di Anda views.py berkas seperti ini:

dari django.db.models impor Q

Setelah mengimpor Q, Anda harus memodifikasi fungsi tampilan Anda seperti ini:

defcari_posting(meminta):
jika permintaan.metode == 'POS':
search_query = permintaan. POS['search_query']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
kembali memberikan (permintaan, 'app/template_name.html', {'pertanyaan':search_query, 'postingan':posting})
kalau tidak:
kembali memberikan (permintaan, 'app/template_name.html',{})

Pada program di atas, posting variabel memfilter model dengan judul posting atau nama penulis. Fungsi tersebut menggunakan ATAU operator—dalam hal ini, simbol pipa—untuk menjalankan filter.

Meningkatkan Pengalaman Pengguna Dengan Fitur Pencarian

Fitur pencarian di aplikasi web Anda secara efektif meningkatkan pengalaman pengguna dan kegunaannya secara keseluruhan. Dengan Django, Anda hanya perlu memanfaatkan fungsionalitas bawaan untuk membuat fitur pencarian Anda berfungsi, memberikan manfaat signifikan bagi Anda dan pengguna Anda.