قم بدمج خاصية البحث في تطبيق Django الخاص بك باستخدام هذا الدليل المفصل خطوة بخطوة.
تتيح إضافة ميزة بحث إلى تطبيق الويب الخاص بك للمستخدمين التنقل فيها بسهولة من خلال البحث عما يريدون. يوفر Django دعمًا مدمجًا لبناء ميزة بحث باستخدام أدوات الاستعلام وإدارة ORM القوية الخاصة به. باستخدام Django ، يمكنك تنفيذ أنواع مختلفة من عمليات البحث ، بما في ذلك عمليات البحث عن الكلمات الرئيسية وعمليات البحث البسيطة وعمليات البحث المتقدمة باستخدام عوامل التصفية.
تنفيذ وظيفة البحث في Django
يسمح لك Django بتنفيذ أنواع مختلفة من عمليات البحث بأساليبه ووظائفه المدمجة. يمكنك إجراء بحث بسيط بالكلمة الأساسية أو بحث متقدم بناءً على حالة الاستخدام الخاصة بك. يجب عليك إجراء بحث متقدم إذا كان لديك تطبيق معقد ، مثل موقع ويب للتجارة الإلكترونية ، في حين أن البحث البسيط بالكلمة المفتاحية مناسب للمشاريع الأقل تعقيدًا.
يمكن العثور على الكود المستخدم في هذه المقالة على جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.
تنفيذ بحث بسيط بكلمة مفتاحية في Django
لإنشاء ميزة بحث بسيطة ، يجب أن تبدأ ببناء شريط البحث الخاص بك. يمكنك بناء شريط البحث الخاص بك في شريط التنقل الخاص بك.
التمهيد يوفر شريط تنقل جاهزًا مع شريط بحث ، ويمكنك ذلك بسهولة دمج Bootstrap ومكوناته في مشروع Django الخاص بك. قم بإنشاء شريط البحث الخاص بك في ملف HTML ، واضبط طريقة النموذج على بريد، وإعطاء حقل الإدخال أ اسم سمة مثل هذه:<استمارةفصل="د-فليكس"دور="يبحث"طريقة="بريد">
{٪ csrf_token٪}
<مدخل
class = "form-control me-NN"
اكتب = "بحث"
placeholder = "بحث"
الاسم = "استعلام البحث"
مطلوب aria-label = "بحث"
>
<زرفصل="نجاح btn-outline-btn"يكتب="يُقدِّم">يبحثزر>
استمارة>
في الكود أعلاه ، اسم حقل الإدخال هو استعلام بحث. النموذج يستخدم رمز CSRF من Django ل منع هجمات CSRF. لجعل شريط البحث الخاص بك يعمل ، اتبع هذه الخطوات.
إنشاء طريقة عرض للبحث
- افتح views.py ملف واستيراد النموذج الخاص بك من ملف نماذج ملف:
من .عارضات ازياء يستورد اسم النموذج
- قم بإنشاء وظيفة عرض لميزة البحث:
defsearch_feature(طلب):
# تحقق مما إذا كان الطلب هو طلب نشر.
لو طريقة الطلب == 'بريد':
# استرداد استعلام البحث الذي أدخله المستخدم
search_query = طلب. بريد['استعلام بحث']
# تصفية النموذج الخاص بك عن طريق استعلام البحث
posts = Model.objects.filter (fieldName__contains = search_query)
يعود تقديم (طلب ، "app / template_name.html", {'استفسار':استعلام بحث، 'دعامات':دعامات})
آخر:
يعود تقديم (طلب ، "app / template_name.html",{})
تتحقق الوظيفة المذكورة أعلاه أولاً مما إذا كان العميل يرسل ملف بريد طلب. إذا نجح التحقق ، فسيتم المضي قدمًا لاسترداد قيمة استعلام بحث المستخدم مثل هذا:
search_query = طلب. بريد['استعلام بحث']
في الطلب. POST ['search_query'] ، 'استعلام بحث' يجب أن يتم استبداله باسم حقل إدخال شريط البحث.
بعد استرداد قيمة استعلام بحث المستخدم ، تقوم الوظيفة بتصفية النموذج باستخدامه __يتضمن طريقة. ال __يتضمن الطريقة غير حساسة لحالة الأحرف. لاستخدام هذه الطريقة ، يجب اتباع هذا التنسيق:
يحتوي fieldName__ على
على سبيل المثال ، إذا كنت تريد أن يقوم المستخدمون بالبحث بناءً على حقل نموذج يسمى اسم، يجب عليك تعديل الكود الخاص بك ليبدو كما يلي:
name__contains = search_query
أخيرًا ، تعرض الوظيفة قالبًا وتمرير استعلام البحث والنموذج المصفاة كسياق.
ومع ذلك ، إذا كانت طريقة النموذج ليست ملف بريد طلب ، تعرض الوظيفة قالبًا بقاموس فارغ ولا تعالج استعلام البحث.
قم بإنشاء قالب لنتيجة البحث
- قم بإنشاء ملف HTML لإرجاع نتائج البحث إلى جانب العميل.
- قم بإخراج نتيجة البحث على الصفحة ليراها المستخدم. يجب أن تبدو الشفرة في ملف HTML الخاص بك كما يلي:
{٪ if الاستعلام٪}
<شعبة>
<شعبة>
حلقة من خلال استعلام البحث
{٪ للنشر في المشاركات٪}
<شعبة>
إعادة طلب البحث
<ص>{{post.title}}ص>
شعبة>
{٪ endfor٪}
شعبة>
شعبة>
{٪ آخر ٪}
إرجاع رسالة إذا لم يقم المستخدم بإدخال استعلام بحث
<h1>يرجى إدخال عناصر البحثh1>
{٪ إنهاء إذا ٪}
يتحقق قالب HTML أعلاه من قيام المستخدم بإدخال استعلام بحث في شريط البحث. إذا قام المستخدم بإدخال استعلام بحث ، أ لحلقة حلقات فوق نتائج البحث وإعادتها إلى المستخدم. في حالة عدم وجود استعلام بحث ، يتم عرض رسالة للمستخدم لإدخال استعلام بحث. الحالة التي قد لا يكون فيها استعلام بحث هي ما إذا كان المستخدم ينتقل مباشرة إلى عنوان URL دون ملء شريط البحث ، على سبيل المثال ، يقوم المستخدم بإدخال عنوان URL مثل mywebsite.com/search مباشرة في المتصفح. يجب عليك التأكد من أنك تستخدم وراثة قالب Django في ملف HTML الخاص بك.
- قم بتعديل كود HTML الخاص بك لإرجاع رسالة خطأ إذا لم تكن هناك نتيجة بحث.
{٪ if الاستعلام٪}
<شعبة>
<شعبة>
تحقق مما إذا كانت هناك نتيجة في قاعدة البيانات
{٪ إذا كانت المشاركات٪}
حلقة من خلال استعلام البحث إذا كانت هناك نتيجة
{٪ للنشر في المشاركات٪}
<شعبة>
إعادة طلب البحث
<ص>{{post.title}}ص>
شعبة>
{٪ endfor٪}
إرجاع رسالة إذا لم يتم العثور على نتائج.
{٪ آخر ٪}
<h3>لم يتم العثور على نتائج عن البحثh3>
{٪ إنهاء إذا ٪}
شعبة>
شعبة>
{٪ آخر ٪}
<h1>يرجى إدخال عناصر البحثh1>
{٪ إنهاء إذا ٪}
يسمح قالب HTML الجديد بتجربة مستخدم أفضل. يقدم بيانًا شرطيًا للتحقق مما إذا كانت نتيجة البحث متاحة في قاعدة البيانات. إذا كان هناك ، فإنه يعرض نتيجة البحث ؛ وإلا فإنه يرسل للمستخدم رسالة خطأ.
تكوين أنماط عنوان URL الخاص بك
- إذا لم تكن قد فعلت هذا ، فأنشئ ملف urls.py ملف في دليل التطبيق الخاص بك.
- في الخاص بك urls.py ، إنشاء ملف نمط URL لصفحة البحث الخاصة بك:
من django.urls يستورد طريق
من. يستورد الآراء
أنماط عنوان url = [
طريق('يبحث/'، views.search_feature، name ="عرض البحث"),
]
يستورد البرنامج أعلاه أولاً ملف طريق وظيفة و الآراء الملف المرتبط بالتطبيق. ثم يقوم بإنشاء مسار مسمى عرض البحث لصفحة البحث.
- أضف إجراء نموذج إلى شريط البحث الخاص بك. يجب أن يشير عنوان URL للإجراء إلى مسار URL المخصص لعرض البحث. في هذه الحالة ، يشير النموذج إلى عرض البحث.
<استمارةفصل="د-فليكس"دور="يبحث"طريقة="بريد"فعل="{٪ url 'search-view'٪}">
<مدخل
class = "form-control me-NN"
اكتب = "بحث"
placeholder = "بحث عن شيء ما"
الاسم = "استعلام البحث"
مطلوب aria-label = "بحث"
>
<زرفصل="نجاح btn-outline-btn"يكتب="يُقدِّم">يبحثزر>
استمارة>
بدون إجراء نموذج يشير إلى مسار عنوان URL للبحث الخاص بك ، لن تعمل ميزة البحث الخاصة بك. تذكر أن مسار عنوان URL للبحث الخاص بك يجب أن يشير إلى عرض Django الذي يتعامل مع منطق ميزة البحث الخاصة بك.
قم بإنشاء ميزة بحث لحقول نموذج متعددة
إذا كنت ترغب في تحسين تجربة المستخدم لتطبيق الويب الخاص بك ، فيمكنك السماح للمستخدمين بالبحث عن طريق أكثر من حقل واحد في نموذجك. على سبيل المثال ، في تطبيق مدونة ، قد ترغب في أن يقوم المستخدم بالبحث بناءً على عناوين المنشورات أو أسماء المؤلفين.
لتنفيذ هذه الميزة ، يجب عليك استخدام س كائن مقدم من Django. يجب عليك استيراد ملف س كائن في الخاص بك views.py ملف مثل هذا:
من نماذج django.db يستورد س
بعد الاستيراد س، يجب عليك تعديل وظيفة العرض الخاصة بك مثل هذا:
defsearch_post(طلب):
لو طريقة الطلب == 'بريد':
search_query = طلب. بريد['استعلام بحث']
posts = Post.objects.filter (Q (title__icontains = search_query) | Q (author__icontains = search_query))
يعود تقديم (طلب ، "app / template_name.html", {'استفسار':استعلام بحث، 'دعامات':دعامات})
آخر:
يعود تقديم (طلب ، "app / template_name.html",{})
في البرنامج أعلاه ، دعامات متغير يقوم بتصفية النموذج إما عن طريق عنوان المشاركة أو اسم المؤلف. تستخدم الوظيفة الامتداد أو عامل - في هذه الحالة ، رمز أنبوب - لأداء المرشح.
تحسين تجربة المستخدم مع ميزة البحث
تعمل ميزة البحث في تطبيق الويب الخاص بك على تحسين تجربة المستخدم وإمكانية الاستخدام بشكل عام. مع Django ، ما عليك سوى الاستفادة من الوظائف المضمنة لجعل ميزة البحث الخاصة بك تعمل ، مما يوفر فوائد كبيرة لك ولمستخدميك.