שלב את תכונת החיפוש באפליקציית Django שלך באמצעות מדריך שלב אחר שלב זה.
הוספת תכונת חיפוש לאפליקציית האינטרנט שלך מאפשרת למשתמשים שלך לנווט בו בקלות על ידי חיפוש אחר מה שהם רוצים. Django מספקת תמיכה מובנית לבניית תכונת חיפוש על ידי שימוש בכלי ה-ORM והשאילתות החזקים שלה. עם Django, אתה יכול ליישם סוגים שונים של חיפושים, כולל חיפושי מילות מפתח, חיפושים פשוטים וחיפושים מתקדמים עם מסננים.
הטמעת פונקציונליות חיפוש ב-Django
Django מאפשר לך ליישם סוגים שונים של חיפושים עם השיטות והפונקציות המובנות שלו. אתה יכול ליישם חיפוש פשוט של מילות מפתח או חיפוש מתקדם על סמך מקרה השימוש שלך. כדאי ליישם חיפוש מתקדם אם יש לכם אפליקציה מורכבת, כמו אתר מסחר אלקטרוני, בעוד שחיפוש מילות מפתח פשוט מתאים לפרויקטים פחות מורכבים.
ניתן למצוא את הקוד המשמש במאמר זה ב- GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.
יישם חיפוש מילות מפתח פשוט ב-Django
כדי ליצור תכונת חיפוש פשוטה, עליך להתחיל בבניית סרגל החיפוש שלך. אתה יכול לבנות את סרגל החיפוש שלך בסרגל הניווט שלך. אתחול מספק סרגל ניווט מוכן עם סרגל חיפוש, ואתה יכול בקלות
שלב את Bootstrap ומרכיביו בפרויקט ה-Django שלך. צור את סרגל החיפוש שלך בקובץ HTML, הגדר את שיטת הטופס ל הודעה, ותן לשדה הקלט א שֵׁם תכונה כזו:<טופסמעמד="ד-פלקס"תַפְקִיד="לחפש"שיטה="הודעה">
{% csrf_token %}
<קֶלֶט
class="form-control me-NN"
type="search"
placeholder="Search"
name="search_query"
required aria-label="Search"
>
<לַחְצָןמעמד="btn btn-outline-success"סוּג="שלח">לחפשלַחְצָן>
טופס>
בקוד לעיל, שם שדה הקלט הוא שאילתת חיפוש. הטופס עושה שימוש ב אסימון CSRF של ג'נגו ל למנוע התקפות CSRF. כדי לגרום לסרגל החיפוש שלך לעבוד, בצע את השלבים הבאים.
צור תצוגה לחיפוש
- פתח את views.py קובץ וייבא את הדגם שלך מה- models.py קוֹבֶץ:
מ .מודלים יְבוּא שם המודל
- צור פונקציית תצוגה עבור תכונת החיפוש:
defsearch_feature(בַּקָשָׁה):
# בדוק אם הבקשה היא בקשה לפרסום.
אם request.method == 'הודעה':
# אחזר את שאילתת החיפוש שהזין המשתמש
search_query = בקשה. הודעה['שאילתת חיפוש']
# סנן את הדגם שלך לפי שאילתת החיפוש
posts = Model.objects.filter (fieldName__contains=search_query)
לַחֲזוֹר render (בקשה, 'app/template_name.html', {'שאילתא':שאילתת חיפוש, 'פוסטים':פוסטים})
אַחֵר:
לַחֲזוֹר render (בקשה, 'app/template_name.html',{})
הפונקציה לעיל בודקת תחילה אם הלקוח שולח א הודעה בַּקָשָׁה. אם הבדיקה תעבור, היא ממשיכה לאחזר את הערך של שאילתת החיפוש של המשתמש כך:
search_query = בקשה. הודעה['שאילתת חיפוש']
לפי בקשה. POST['search_query'], 'שאילתת חיפוש' צריך להיות מוחלף בשם של שדה הקלט של סרגל החיפוש שלך.
לאחר אחזור הערך של שאילתת החיפוש של המשתמש, הפונקציה מסננת איתה את המודל באמצעות ה __מכיל שיטה. ה __מכיל השיטה אינה תלוית רישיות. כדי להשתמש בשיטה זו, עליך לבצע את הפורמט הבא:
fieldName__contains
לדוגמה, אם אתה רוצה שהמשתמשים שלך יחפשו על סמך שדה מודל שנקרא שֵׁם, עליך לשנות את הקוד שלך כך שיראה כך:
name__contains=search_query
לבסוף, הפונקציה מעבדת תבנית ומעבירה את שאילתת החיפוש והמודל המסונן כהקשר.
עם זאת, אם שיטת הטופס אינה א הודעה request, הפונקציה מעבדת תבנית עם מילון ריק ואינה מעבדת את שאילתת החיפוש.
צור תבנית עבור תוצאת החיפוש
- צור קובץ HTML כדי להחזיר את תוצאות החיפוש שלך לצד הלקוח.
- פלט את תוצאת החיפוש בדף כדי שהמשתמש יוכל לראות. הקוד בקובץ ה-HTML שלך אמור להיראות כך:
{% אם שאילתה %}
<div>
<div>
לעבור דרך שאילתת החיפוש
{% לפוסט בפוסטים %}
<div>
החזר שאילתת חיפוש
<ע>{{post.title}}ע>
div>
{% endfor %}
div>
div>
{% אחר %}
להחזיר הודעה אם המשתמש לא מזין שאילתת חיפוש
<h1>אנא הזן שאילתת חיפושh1>
{% endif %}
תבנית ה-HTML שלמעלה בודקת אם המשתמש מזין שאילתת חיפוש בסרגל החיפוש. אם המשתמש מזין שאילתת חיפוש, א עבור לולאה עובר לולאה על תוצאות החיפוש ומחזיר אותן למשתמש. כאשר אין שאילתת חיפוש, מוצגת הודעה למשתמש להזין שאילתת חיפוש. מקרה שבו לא תהיה שאילתת חיפוש הוא אם המשתמש שלך עובר ישירות לכתובת האתר מבלי למלא את שורת החיפוש, כלומר, המשתמש שלך מזין כתובת אתר כגון mywebsite.com/search ישירות לדפדפן. עליך לוודא שאתה משתמש ירושת התבנית של ג'נגו בקובץ HTML שלך.
- שנה את קוד ה-HTML שלך כדי להחזיר הודעת שגיאה אם אין תוצאת חיפוש.
{% אם שאילתה %}
<div>
<div>
בדוק אם יש תוצאה במסד הנתונים
{% if posts %}
לעבור דרך שאילתת החיפוש אם יש תוצאה
{% לפוסט בפוסטים %}
<div>
החזר שאילתת חיפוש
<ע>{{post.title}}ע>
div>
{% endfor %}
החזר הודעה אם לא נמצאו תוצאות.
{% אחר %}
<h3>לא נמצאו תוצאות חיפושh3>
{% endif %}
div>
div>
{% אחר %}
<h1>אנא הזן שאילתת חיפושh1>
{% endif %}
תבנית ה-HTML החדשה מאפשרת חווית משתמש טובה יותר. הוא מציג הצהרה מותנית כדי לבדוק אם תוצאת חיפוש זמינה במסד הנתונים. אם יש, הוא מציג את תוצאת החיפוש; אחרת, הוא שולח למשתמש הודעת שגיאה.
הגדר את דפוסי כתובת האתר שלך
- אם לא עשית זאת, צור א urls.py קובץ בספריית האפליקציה שלך.
- אצלך urls.py, קובץ צור דפוס כתובת אתר עבור דף החיפוש שלך:
מ django.urls יְבוּא נָתִיב
מ. יְבוּא צפיות
urlpatterns = [
נָתִיב('לחפש/', views.search_feature, name='חיפוש-תצוגה'),
]
התוכנית לעיל מייבאת תחילה את נָתִיב פונקציה ואת צפיות קובץ הקשור לאפליקציה. ואז זה יוצר נתיב בשם חיפוש-תצוגה עבור דף החיפוש.
- הוסף פעולת טופס לסרגל החיפוש שלך. כתובת האתר לפעולה צריכה להצביע על נתיב כתובת האתר המוקדש לתצוגת החיפוש. במקרה זה, הטופס מצביע על חיפוש-תצוגה.
<טופסמעמד="ד-פלקס"תַפְקִיד="לחפש"שיטה="הודעה"פעולה="{% url 'search-view' %}">
<קֶלֶט
class="form-control me-NN"
type="search"
placeholder="חפש משהו"
name="search_query"
required aria-label="Search"
>
<לַחְצָןמעמד="btn btn-outline-success"סוּג="שלח">לחפשלַחְצָן>
טופס>
ללא פעולת טופס המצביעה על נתיב כתובת האתר של החיפוש שלך, תכונת החיפוש שלך לא תעבוד. זכור שנתיב כתובת האתר של החיפוש שלך חייב להצביע לתצוגת Django שמטפלת בלוגיקה של תכונת החיפוש שלך.
צור תכונת חיפוש עבור שדות דגמים מרובים
אם אתה רוצה לשפר את חוויית המשתמש של אפליקציית האינטרנט שלך, אתה יכול לאפשר למשתמשים שלך לחפש לפי יותר משדה אחד במודל שלך. לדוגמה, באפליקציית בלוג, ייתכן שתרצה שהמשתמש שלך יחפש על סמך כותרות פוסטים או שמות מחברים.
כדי ליישם תכונה זו, עליך להשתמש ב- ש חפץ שסופק על ידי Django. כדאי לייבא את ש חפץ אצלך views.py קובץ כזה:
מ django.db.models יְבוּא ש
לאחר הייבוא ש, עליך לשנות את פונקציית התצוגה שלך כך:
defחיפוש_פוסט(בַּקָשָׁה):
אם request.method == 'הודעה':
search_query = בקשה. הודעה['שאילתת חיפוש']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
לַחֲזוֹר render (בקשה, 'app/template_name.html', {'שאילתא':שאילתת חיפוש, 'פוסטים':פוסטים})
אַחֵר:
לַחֲזוֹר render (בקשה, 'app/template_name.html',{})
בתוכנית למעלה, ה פוסטים המשתנה מסנן את המודל לפי כותרת הפוסט או שם המחבר. הפונקציה משתמשת ב- אוֹ מפעיל - במקרה זה, סמל צינור - לביצוע המסנן.
שיפור חווית משתמש עם תכונת חיפוש
תכונת חיפוש באפליקציית האינטרנט שלך משפרת ביעילות את חווית המשתמש ואת השימושיות הכוללת שלה. עם Django, אתה רק צריך למנף את הפונקציות המובנות כדי לגרום לתכונת החיפוש שלך לעבוד, ולספק יתרונות משמעותיים לך ולמשתמשים שלך.