Bu adım adım kılavuzu kullanarak arama özelliğini Django uygulamanıza entegre edin.
Web uygulamanıza bir arama özelliği eklemek, kullanıcılarınızın istediklerini arayarak kolayca gezinmesini sağlar. Django, güçlü ORM ve sorgu araçlarını kullanarak bir arama özelliği oluşturmak için yerleşik destek sağlar. Django ile, anahtar kelime aramaları, basit aramalar ve filtrelerle gelişmiş aramalar dahil olmak üzere farklı arama türleri uygulayabilirsiniz.
Django'da Arama İşlevselliğini Uygulama
Django, yerleşik yöntemleri ve işlevleriyle farklı arama türlerini uygulamanıza olanak tanır. Kullanım durumunuza bağlı olarak basit bir anahtar kelime araması veya gelişmiş bir arama uygulayabilirsiniz. E-ticaret sitesi gibi karmaşık bir uygulamanız varsa gelişmiş bir arama uygulamanız gerekirken, daha az karmaşık projeler için basit bir anahtar kelime araması uygundur.
Bu makalede kullanılan kod şu adreste bulunabilir: GitHub ve MIT lisansı altında ücretsiz olarak kullanabilirsiniz.
Django'da Basit Anahtar Sözcük Araması Uygulama
Basit bir arama özelliği oluşturmak için arama çubuğunuzu oluşturarak başlamalısınız. Arama çubuğunuzu gezinme çubuğunuzda oluşturabilirsiniz. önyükleme bir arama çubuğuna sahip hazır bir gezinme çubuğu sağlar ve kolayca Bootstrap ve bileşenlerini Django projenize entegre edin. Arama çubuğunuzu bir HTML dosyasında oluşturun, form yöntemini şu şekilde ayarlayın: POSTALAMAK, ve giriş alanına bir isim bunun gibi öznitelik:
<biçimsınıf="d-esnek"rol="aramak"yöntem="POSTALAMAK">
{% csrf_token %}
<giriş
class="form-kontrol me-NN"
yazın="ara"
placeholder="Ara"
isim="arama_sorgusu"
gerekli aria-label="Ara"
>
<düğmesınıf="btn btn-anahat-başarı"tip="göndermek">Aramakdüğme>
biçim>
Yukarıdaki kodda, giriş alanının adı arama_sorgu. form kullanır Django'nun CSRF belirteci ile CSRF saldırılarını önleme. Arama çubuğunuzun çalışmasını sağlamak için şu adımları izleyin.
Arama için bir Görünüm Oluşturun
- aç senin görünümler.py dosyalayın ve modelinizi buradan içe aktarın. modeller.py dosya:
itibaren .modeller içe aktarmak Model adı
- Arama özelliği için bir görüntüleme işlevi oluşturun:
kesinarama_özelliği(rica etmek):
# İsteğin bir gönderi isteği olup olmadığını kontrol edin.
eğer istek.yöntem == 'POSTALAMAK':
# Kullanıcı tarafından girilen arama sorgusunu alın
arama_sorgu = istek. POSTALAMAK["arama_sorgusu"]
# Modelinizi arama sorgusuna göre filtreleyin
gönderiler = Model.objects.filter (fieldName__contains=search_query)
geri dönmek render (istek, "uygulama/template_name.html", {'sorgu':arama_sorgusu, 'gönderiler':gönderiler})
başka:
geri dönmek render (istek, "uygulama/template_name.html",{})
Yukarıdaki işlev, önce müşterinin bir mesaj gönderip göndermediğini kontrol eder. POSTALAMAK rica etmek. Kontrol başarılı olursa, kullanıcının arama sorgusunun değerini şu şekilde almaya devam eder:
arama_sorgu = istek. POSTALAMAK["arama_sorgusu"]
istek üzerine POST['arama_sorgusu'], "arama_sorgusu" arama çubuğunuzun giriş alanının adıyla değiştirilmelidir.
Kullanıcının arama sorgusunun değerini aldıktan sonra işlev, __içerir yöntem. bu __içerir yöntem büyük/küçük harfe duyarsızdır. Bu yöntemi kullanmak için şu formatı izlemelisiniz:
alanAdı__içerir
Örneğin, kullanıcılarınızın adlı bir model alanına göre arama yapmasını istiyorsanız isim, kodunuzu şöyle görünecek şekilde değiştirmelisiniz:
ad__içerir=arama_sorgu
Son olarak, işlev bir şablon oluşturur ve arama sorgusunu ve filtrelenmiş modeli bağlam olarak iletir.
Ancak formun yöntemi bir POSTALAMAK işlev, boş bir sözlüğe sahip bir şablon oluşturur ve arama sorgusunu işlemez.
Arama Sonucu için Bir Şablon Oluşturun
- Arama sonuçlarınızı istemci tarafına döndürmek için bir HTML dosyası oluşturun.
- Kullanıcının görmesi için arama sonucunu sayfada çıktılayın. HTML dosyanızdaki kod şöyle görünmelidir:
{% if sorgusu %}
<div>
<div>
arama sorgusu boyunca döngü
{% gönderilerdeki gönderiler için %}
<div>
dönüş arama sorgusu
<P>{{yazı başlığı}}P>
div>
{% endfor %}
div>
div>
{% başka %}
kullanıcı bir arama sorgusu girmezse bir mesaj döndürür
<h1>Lütfen bir arama sorgusu girinh1>
{% endif %}
Yukarıdaki HTML şablonu, kullanıcının arama çubuğuna bir arama sorgusu girip girmediğini kontrol eder. Kullanıcı bir arama sorgusu girerse, bir döngü için arama sonuçları üzerinde döner ve bunları kullanıcıya döndürür. Arama sorgusu olmadığında, kullanıcının bir arama sorgusu girmesi için bir mesaj görüntülenir. Arama sorgusu olmayabilecek bir durum, kullanıcınızın arama çubuğunu doldurmadan doğrudan URL'ye gitmesidir, yani, kullanıcınız aşağıdaki gibi bir URL girer: mywebsite.com/search doğrudan tarayıcıya. kullandığınızdan emin olmalısınız. Django'nun şablon kalıtımı HTML dosyanızda.
- Arama sonucu yoksa bir hata mesajı döndürmek için HTML kodunuzu değiştirin.
{% if sorgusu %}
<div>
<div>
veritabanında bir sonuç olup olmadığını kontrol edin
{% eğer gönderilerse %}
bir sonuç varsa arama sorgusu boyunca döngü
{% gönderilerdeki gönderiler için %}
<div>
dönüş arama sorgusu
<P>{{yazı başlığı}}P>
div>
{% endfor %}
sonuç bulunamazsa bir mesaj döndürün.
{% başka %}
<h3>Arama Sonucu Bulunamadıh3>
{% endif %}
div>
div>
{% başka %}
<h1>Lütfen bir arama sorgusu girinh1>
{% endif %}
Yeni HTML şablonu, daha iyi bir kullanıcı deneyimi sağlar. Veritabanında bir arama sonucunun olup olmadığını kontrol etmek için koşullu bir ifade sunar. Varsa, arama sonucunu görüntüler; aksi takdirde kullanıcıya bir hata mesajı gönderir.
URL Kalıplarınızı Yapılandırın
- Bunu yapmadıysanız, bir urls.py uygulama dizininizdeki dosya.
- senin içinde urls.py, dosya arama sayfanız için bir URL kalıbı oluşturun:
itibaren django.urls içe aktarmak yol
itibaren. içe aktarmak Görüntüleme
url kalıpları = [
yol('aramak/', görünümler.arama_özelliği, ad="arama-görünüm"),
]
Yukarıdaki program önce içe aktarır yol işlev ve Görüntüleme uygulamayla ilgili dosya. Sonra adında bir yol oluşturur. arama görünümü arama sayfası için
- Arama çubuğunuza bir form eylemi ekleyin. İşlem URL'si, arama görünümüne ayrılmış URL yolunu göstermelidir. Bu durumda, form şunu gösterir: arama görünümü.
<biçimsınıf="d-esnek"rol="aramak"yöntem="POSTALAMAK"aksiyon="{% url 'arama-görünümü' %}">
<giriş
class="form-kontrol me-NN"
yazın="ara"
placeholder="Bir şey ara"
isim="arama_sorgusu"
gerekli aria-label="Ara"
>
<düğmesınıf="btn btn-anahat-başarı"tip="göndermek">Aramakdüğme>
biçim>
Arama URL yolunuzu işaret eden bir form eylemi olmadan, arama özelliğiniz çalışmaz. Arama URL yolunuzun, arama özelliğinizin mantığını işleyen Django görünümüne işaret etmesi gerektiğini unutmayın.
Birden Çok Model Alanı İçin Arama Özelliği Oluşturma
Web uygulamanızın kullanıcı deneyimini iyileştirmek istiyorsanız, kullanıcılarınızın modelinizde birden fazla alana göre arama yapmasını sağlayabilirsiniz. Örneğin, bir blog uygulamasında, kullanıcınızın gönderi başlıklarına veya yazar adlarına göre arama yapmasını isteyebilirsiniz.
Bu özelliği uygulamak için, Q Django tarafından sağlanan nesne. içe aktarmalısınız Q senin içinde nesne görünümler.py dosya şu şekilde:
itibaren django.db.modelleri içe aktarmak Q
içe aktardıktan sonra Q, görünüm işlevinizi şu şekilde değiştirmelisiniz:
kesinsearch_post(rica etmek):
eğer istek.yöntem == 'POSTALAMAK':
arama_sorgu = istek. POSTALAMAK["arama_sorgusu"]
gönderiler = Post.objects.filter (Q(title__icontains=search_query) | Q(yazar__icontains=search_query))
geri dönmek render (istek, "uygulama/template_name.html", {'sorgu':arama_sorgusu, 'gönderiler':gönderiler})
başka:
geri dönmek render (istek, "uygulama/template_name.html",{})
Yukarıdaki programda, gönderiler değişken, modeli gönderi başlığına veya yazarın adına göre filtreler. fonksiyon kullanır VEYA filtreyi gerçekleştirmek için bu durumda bir boru simgesi olan operatör.
Arama Özelliği İle Kullanıcı Deneyimini İyileştirme
Web uygulamanızdaki bir arama özelliği, kullanıcı deneyimini ve genel kullanılabilirliği etkili bir şekilde geliştirir. Django ile, size ve kullanıcılarınıza önemli avantajlar sağlayan arama özelliğinizin çalışmasını sağlamak için yalnızca yerleşik işlevlerden yararlanmanız gerekir.