Farih.co.id
Home Programming Bagaimana Menambahkan Fungsi Pencarian ke Aplikasi Django

Bagaimana Menambahkan Fungsi Pencarian ke Aplikasi Django

django search feature

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.

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 siap pakai dengan bilah pencarian, dan Anda dapat dengan mudah mengintegrasikan 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:

 <form class="d-flex" role="search" method="POST">
 {% csrf_token %}
<input
    class="form-control me-2"
    type="search"
    placeholder="Search"
    name="search_query"
    required aria-label="Search"
 >
<button class="btn btn-outline-success" type="submit">Search</button>
</form>

Pada kode di atas, nama field inputnya adalah search_query. Bentuk memanfaatkan token CSRF Django untuk 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:

 from .models import ModelName
  • Buat fungsi tampilan untuk fitur pencarian:

 def search_feature(request):
    
    if request.method == 'POST':
        
        search_query = request.POST['search_query']
        
        posts = Model.objects.filter(fieldName__contains=search_query)
        return render(request, 'app/template_name.html', {'query':search_query, 'posts':posts})
    else:
        return render(request, '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 = request.POST['search_query']

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

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

 fieldName__contains

Misalnya, jika Anda ingin pengguna mencari berdasarkan bidang model yang disebut namaAnda 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.

folder yang menampilkan empat file HTML termasuk file bernama search_post.html

  • Keluarkan hasil pencarian pada halaman untuk dilihat pengguna. Kode dalam file HTML Anda akan terlihat seperti ini:

 {% if query %}
    <div>
        <div>
        
        {% for post in posts %}
            <div>
                
                <p>{{post.title}}</p>
            </div>
        {% endfor %}
        </div>
    </div>
{% else %}
    
    <h1>Please enter a search query</h1>
{% endif %}

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.

halaman blog yang menampilkan beberapa hasil setelah pengguna mencari pt

  • Ubah kode HTML Anda untuk mengembalikan pesan kesalahan jika tidak ada hasil pencarian.

 {% if query %}
    <div>
        <div>
        
        {% if posts %}
            
            {% for post in posts %}
                <div>
                    
                    <p>{{post.title}}</p>
                </div>
            {% endfor %}
            
        {% else %}
            <h3>No search results found</h3>
        {% endif %}
        </div>
    </div>
{% else %}
    <h1>Please enter a search query</h1>
{% endif %}

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.

halaman pencarian memberi tahu pengguna bahwa tidak ada hasil untuk pencarian mereka

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:

 from django.urls import path
from . import views

urlpatterns = [
    path('search/', views.search_feature, name='search-view'),
]

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.

 <form class="d-flex" role="search" method="POST" action="{% url 'search-view' %}">
   <input
       class="form-control me-2"
       type="search"
       placeholder="Search for something"
       name="search_query"
       required aria-label="Search"
   >
   <button class="btn btn-outline-success" type="submit">Search</button>
</form>

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:

 from django.db.models import Q

Setelah mengimpor QAnda harus memodifikasi fungsi tampilan Anda seperti ini:

 def search_post(request):
    if request.method == 'POST':
        search_query = request.POST['search_query']
        posts = Post.objects.filter(Q(title__icontains=search_query) | Q(author__icontains=search_query))
        return render(request, 'app/template_name.html', {'query':search_query, 'posts':posts})
    else:
        return render(request, '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.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad