Ενσωματώστε τη δυνατότητα αναζήτησης στην εφαρμογή Django χρησιμοποιώντας αυτόν τον οδηγό βήμα προς βήμα.

Η προσθήκη μιας δυνατότητας αναζήτησης στην εφαρμογή Ιστού σας επιτρέπει στους χρήστες σας να πλοηγούνται εύκολα σε αυτήν αναζητώντας αυτό που θέλουν. Το Django παρέχει ενσωματωμένη υποστήριξη για τη δημιουργία μιας δυνατότητας αναζήτησης χρησιμοποιώντας τα ισχυρά εργαλεία ORM και ερωτημάτων του. Με το Django, μπορείτε να εφαρμόσετε διαφορετικούς τύπους αναζητήσεων, συμπεριλαμβανομένων αναζητήσεων λέξεων-κλειδιών, απλών αναζητήσεων και σύνθετων αναζητήσεων με φίλτρα.

Εφαρμογή της λειτουργικότητας αναζήτησης στο Django

Το Django σάς επιτρέπει να υλοποιείτε διαφορετικούς τύπους αναζητήσεων με τις ενσωματωμένες μεθόδους και λειτουργίες του. Μπορείτε να εφαρμόσετε μια απλή αναζήτηση λέξεων-κλειδιών ή μια σύνθετη αναζήτηση με βάση την περίπτωση χρήσης σας. Θα πρέπει να εφαρμόσετε μια σύνθετη αναζήτηση εάν έχετε μια σύνθετη εφαρμογή, όπως έναν ιστότοπο ηλεκτρονικού εμπορίου, ενώ μια απλή αναζήτηση λέξεων-κλειδιών είναι κατάλληλη για λιγότερο σύνθετα έργα.

instagram viewer

Μπορείτε να βρείτε τον κώδικα που χρησιμοποιείται σε αυτό το άρθρο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.

Υλοποιήστε μια απλή αναζήτηση λέξεων-κλειδιών στο Django

Για να δημιουργήσετε μια απλή δυνατότητα αναζήτησης, θα πρέπει να ξεκινήσετε δημιουργώντας τη γραμμή αναζήτησής σας. Μπορείτε να δημιουργήσετε τη γραμμή αναζήτησής σας στη γραμμή πλοήγησης. Bootstrap παρέχει μια έτοιμη γραμμή πλοήγησης με γραμμή αναζήτησης και μπορείτε εύκολα ενσωματώστε το Bootstrap και τα στοιχεία του στο έργο σας στο Django. Δημιουργήστε τη γραμμή αναζήτησής σας σε ένα αρχείο HTML, ορίστε τη μέθοδο φόρμας σε ΘΕΣΗ, και δώστε το πεδίο εισαγωγής a όνομα χαρακτηριστικό ως εξής:

<μορφήτάξη="d-flex"ρόλος="Αναζήτηση"μέθοδος="ΘΕΣΗ">
 {% csrf_token %}
<εισαγωγή
class="form-control me-NN"
type="αναζήτηση"
placeholder="Αναζήτηση"
name="search_query"
απαιτείται aria-label="Αναζήτηση"
 >
<κουμπίτάξη="btn btn-outline-success"τύπος="υποβάλλουν">Αναζήτησηκουμπί>
μορφή>

Στον παραπάνω κωδικό, το όνομα του πεδίου εισαγωγής είναι αναζήτηση_ερώτημα. Η φόρμα χρησιμοποιεί Το διακριτικό CSRF του Django προς την πρόληψη επιθέσεων CSRF. Για να λειτουργήσει η γραμμή αναζήτησής σας, ακολουθήστε αυτά τα βήματα.

Δημιουργήστε μια προβολή για την αναζήτηση

  • Ανοιξε το δικό σου views.py αρχείο και εισαγωγή του μοντέλου σας από το models.py αρχείο:
από .μοντέλα εισαγωγή Ονομα μοντέλου
  • Δημιουργήστε μια λειτουργία προβολής για τη δυνατότητα αναζήτησης:
defSearch_feature(αίτηση):
# Ελέγξτε εάν το αίτημα είναι αίτημα ανάρτησης.
αν αίτημα.μέθοδος == 'ΘΕΣΗ':
# Ανακτήστε το ερώτημα αναζήτησης που έχει καταχωρίσει ο χρήστης
search_query = αίτημα. ΘΕΣΗ['search_query']
# Φιλτράρετε το μοντέλο σας με βάση το ερώτημα αναζήτησης
αναρτήσεις = Model.objects.filter (fieldName__contains=search_query)
ΕΠΙΣΤΡΟΦΗ απόδοση (αίτημα, 'app/template_name.html', {'ερώτηση':search_query, "αναρτήσεις":posts})
αλλού:
ΕΠΙΣΤΡΟΦΗ απόδοση (αίτημα, 'app/template_name.html',{})

Η παραπάνω συνάρτηση ελέγχει πρώτα εάν ο πελάτης στέλνει a ΘΕΣΗ αίτηση. Εάν ο έλεγχος περάσει, προχωρά για ανάκτηση της τιμής του ερωτήματος αναζήτησης του χρήστη ως εξής:

search_query = αίτημα. ΘΕΣΗ['search_query']

Κατόπιν αιτήματος. ΑΝΑΡΤΗΣΗ['search_query'], "search_query" θα πρέπει να αντικατασταθεί με το όνομα του πεδίου εισαγωγής της γραμμής αναζήτησής σας.

Μετά την ανάκτηση της τιμής του ερωτήματος αναζήτησης του χρήστη, η συνάρτηση φιλτράρει το μοντέλο με αυτό χρησιμοποιώντας το __περιέχει μέθοδος. ο __περιέχει Η μέθοδος είναι χωρίς διάκριση πεζών-κεφαλαίων. Για να χρησιμοποιήσετε αυτήν τη μέθοδο, θα πρέπει να ακολουθήσετε αυτήν τη μορφή:

fieldName__contains

Για παράδειγμα, εάν θέλετε οι χρήστες σας να κάνουν αναζήτηση βάσει ενός πεδίου μοντέλου που ονομάζεται όνομα, θα πρέπει να τροποποιήσετε τον κώδικά σας ώστε να μοιάζει με αυτό:

name__contains=search_query

Τέλος, η συνάρτηση αποδίδει ένα πρότυπο και μεταβιβάζει το ερώτημα αναζήτησης και το φιλτραρισμένο μοντέλο ως περιβάλλον.

Ωστόσο, εάν η μέθοδος της φόρμας δεν είναι α ΘΕΣΗ αίτημα, η συνάρτηση αποδίδει ένα πρότυπο με ένα κενό λεξικό και δεν επεξεργάζεται το ερώτημα αναζήτησης.

Δημιουργήστε ένα πρότυπο για το αποτέλεσμα αναζήτησης

  • Δημιουργήστε ένα αρχείο HTML για να επιστρέψετε τα αποτελέσματα αναζήτησης στην πλευρά του πελάτη.
  • Εξαγωγή του αποτελέσματος αναζήτησης στη σελίδα για να το δει ο χρήστης. Ο κώδικας στο αρχείο HTML θα πρέπει να μοιάζει με αυτό:
{% εάν ερώτημα %}
<div>
<div>
βρόχο μέσω του ερωτήματος αναζήτησης
{% για ανάρτηση σε αναρτήσεις %}
<div>
επιστροφή ερωτήματος αναζήτησης
<Π>{{Τίτλος ανάρτησης}}Π>
div>
{% τέλος για %}
div>
div>
{% other %}
επιστρέψτε ένα μήνυμα εάν ο χρήστης δεν εισάγει ένα ερώτημα αναζήτησης
<h1>Εισαγάγετε ένα ερώτημα αναζήτησηςh1>
{% τέλος εαν %}

Το παραπάνω πρότυπο HTML ελέγχει εάν ο χρήστης εισάγει ένα ερώτημα αναζήτησης στη γραμμή αναζήτησης. Εάν ο χρήστης εισάγει ένα ερώτημα αναζήτησης, α για βρόχο κάνει βρόχους πάνω από τα αποτελέσματα αναζήτησης και τα επιστρέφει στον χρήστη. Όταν δεν υπάρχει ερώτημα αναζήτησης, εμφανίζεται ένα μήνυμα για τον χρήστη να εισάγει ένα ερώτημα αναζήτησης. Μια περίπτωση όπου μπορεί να μην υπάρχει ερώτημα αναζήτησης είναι εάν ο χρήστης σας μεταβεί απευθείας στη διεύθυνση URL χωρίς να συμπληρώσει τη γραμμή αναζήτησης, δηλαδή, ο χρήστης σας εισάγει μια διεύθυνση URL όπως π.χ. mywebsite.com/search απευθείας στο πρόγραμμα περιήγησης. Θα πρέπει να βεβαιωθείτε ότι χρησιμοποιείτε Η κληρονομιά του προτύπου του Django στο αρχείο HTML σας.

  • Τροποποιήστε τον κώδικα HTML για να εμφανιστεί ένα μήνυμα σφάλματος εάν δεν υπάρχει αποτέλεσμα αναζήτησης.
{% εάν ερώτημα %}
<div>
<div>
ελέγξτε αν υπάρχει αποτέλεσμα στη βάση δεδομένων
{% αν δημοσιεύσεις %}
πραγματοποιήστε βρόχο μέσω του ερωτήματος αναζήτησης εάν υπάρχει αποτέλεσμα
{% για ανάρτηση σε αναρτήσεις %}
<div>
επιστροφή ερωτήματος αναζήτησης
<Π>{{Τίτλος ανάρτησης}}Π>
div>
{% τέλος για %}
επιστρέψτε ένα μήνυμα εάν δεν βρέθηκαν αποτελέσματα.
{% other %}
<h3>Δεν βρέθηκαν αποτελέσματα αναζήτησηςh3>
{% τέλος εαν %}
div>
div>
{% other %}
<h1>Εισαγάγετε ένα ερώτημα αναζήτησηςh1>
{% τέλος εαν %}

Το νέο πρότυπο HTML επιτρέπει μια καλύτερη εμπειρία χρήστη. Εισάγει μια δήλωση υπό όρους για να ελέγξει εάν ένα αποτέλεσμα αναζήτησης είναι διαθέσιμο στη βάση δεδομένων. Εάν υπάρχει, εμφανίζει το αποτέλεσμα αναζήτησης. Διαφορετικά, στέλνει στον χρήστη ένα μήνυμα σφάλματος.

Διαμορφώστε τα μοτίβα URL σας

  • Εάν δεν το έχετε κάνει αυτό, δημιουργήστε ένα urls.py αρχείο στον κατάλογο της εφαρμογής σας.
  • Στο δικό σου urls.py, αρχείο δημιουργήστε ένα μοτίβο διεύθυνσης URL για τη σελίδα αναζήτησής σας:
από django.urls εισαγωγή μονοπάτι
από. εισαγωγή προβολές

urlpatterns = [
μονοπάτι('Αναζήτηση/', views.search_feature, name="αναζήτηση-προβολή"),
]

Το παραπάνω πρόγραμμα εισάγει πρώτα το μονοπάτι λειτουργία και το προβολές αρχείο που σχετίζεται με την εφαρμογή. Στη συνέχεια δημιουργεί μια διαδρομή με το όνομα αναζήτηση-προβολή για τη σελίδα αναζήτησης.

  • Προσθέστε μια ενέργεια φόρμας στη γραμμή αναζήτησής σας. Η διεύθυνση URL ενέργειας θα πρέπει να δείχνει στη διαδρομή URL που είναι αφιερωμένη στην προβολή αναζήτησης. Σε αυτήν την περίπτωση, η φόρμα δείχνει σε αναζήτηση-προβολή.
<μορφήτάξη="d-flex"ρόλος="Αναζήτηση"μέθοδος="ΘΕΣΗ"δράση="{% url 'search-view' %}">
<εισαγωγή
class="form-control me-NN"
type="αναζήτηση"
placeholder="Αναζήτηση για κάτι"
name="search_query"
απαιτείται aria-label="Αναζήτηση"
>
<κουμπίτάξη="btn btn-outline-success"τύπος="υποβάλλουν">Αναζήτησηκουμπί>
μορφή>

Χωρίς μια ενέργεια φόρμας που να δείχνει τη διαδρομή URL αναζήτησης, η δυνατότητα αναζήτησής σας δεν θα λειτουργήσει. Θυμηθείτε ότι η διαδρομή URL αναζήτησης πρέπει να οδηγεί στην προβολή Django που χειρίζεται τη λογική της δυνατότητας αναζήτησής σας.

Δημιουργήστε μια δυνατότητα αναζήτησης για πολλά πεδία μοντέλων

Εάν θέλετε να βελτιώσετε την εμπειρία χρήστη της εφαρμογής ιστού σας, μπορείτε να αφήσετε τους χρήστες σας να κάνουν αναζήτηση σε περισσότερα από ένα πεδία στο μοντέλο σας. Για παράδειγμα, σε μια εφαρμογή ιστολογίου, μπορεί να θέλετε ο χρήστης σας να κάνει αναζήτηση με βάση τίτλους αναρτήσεων ή ονόματα συγγραφέων.

Για να εφαρμόσετε αυτήν τη δυνατότητα, θα πρέπει να χρησιμοποιήσετε το Q αντικείμενο που παρέχεται από τον Django. Θα πρέπει να εισάγετε το Q αντικείμενο στο δικό σου views.py αρχείο σαν αυτό:

από django.db.models εισαγωγή Q

Μετά την εισαγωγή Q, θα πρέπει να τροποποιήσετε τη λειτουργία προβολής σας ως εξής:

defαναζήτηση_ανάρτηση(αίτηση):
αν αίτημα.μέθοδος == 'ΘΕΣΗ':
search_query = αίτημα. ΘΕΣΗ['search_query']
αναρτήσεις = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
ΕΠΙΣΤΡΟΦΗ απόδοση (αίτημα, 'app/template_name.html', {'ερώτηση':search_query, "αναρτήσεις":posts})
αλλού:
ΕΠΙΣΤΡΟΦΗ απόδοση (αίτημα, 'app/template_name.html',{})

Στο παραπάνω πρόγραμμα, το αναρτήσεις Η μεταβλητή φιλτράρει το μοντέλο είτε με τον τίτλο της ανάρτησης είτε με το όνομα του συγγραφέα. Η συνάρτηση χρησιμοποιεί το Ή χειριστή—σε αυτήν την περίπτωση, ένα σύμβολο σωλήνα—για την εκτέλεση του φίλτρου.

Βελτίωση της εμπειρίας χρήστη με μια λειτουργία αναζήτησης

Μια δυνατότητα αναζήτησης στην εφαρμογή Ιστού σας βελτιώνει αποτελεσματικά την εμπειρία χρήστη και τη συνολική χρηστικότητά της. Με το Django, χρειάζεται μόνο να αξιοποιήσετε τις ενσωματωμένες λειτουργίες για να λειτουργήσει η δυνατότητα αναζήτησής σας, παρέχοντας σημαντικά οφέλη για εσάς και τους χρήστες σας.