इस चरण-दर-चरण मार्गदर्शिका का उपयोग करके अपने Django एप्लिकेशन में खोज सुविधा को एकीकृत करें।

अपने वेब एप्लिकेशन में एक खोज सुविधा जोड़ने से आपके उपयोगकर्ता जो चाहते हैं उसे खोजकर इसे आसानी से नेविगेट कर सकते हैं। Django अपने शक्तिशाली ORM और क्वेरी टूल का उपयोग करके एक खोज सुविधा बनाने के लिए अंतर्निहित समर्थन प्रदान करता है। Django के साथ, आप विभिन्न प्रकार की खोजों को लागू कर सकते हैं, जिसमें कीवर्ड खोज, सरल खोज और फ़िल्टर के साथ उन्नत खोज शामिल हैं।

Django में खोज कार्यक्षमता लागू करना

Django आपको इसके अंतर्निहित तरीकों और कार्यों के साथ विभिन्न प्रकार की खोजों को लागू करने की अनुमति देता है। आप अपने उपयोग के मामले के आधार पर एक साधारण खोजशब्द खोज या एक उन्नत खोज लागू कर सकते हैं। यदि आपके पास एक जटिल एप्लिकेशन है, जैसे ई-कॉमर्स वेबसाइट, तो आपको एक उन्नत खोज लागू करनी चाहिए, जबकि एक साधारण कीवर्ड खोज कम जटिल परियोजनाओं के लिए उपयुक्त है।

इस आलेख में प्रयुक्त कोड पर पाया जा सकता है GitHub और आपके लिए एमआईटी लाइसेंस के तहत उपयोग करने के लिए स्वतंत्र है।

Django में एक साधारण कीवर्ड खोज लागू करें

instagram viewer

एक साधारण खोज सुविधा बनाने के लिए, आपको अपना खोज बार बनाकर प्रारंभ करना चाहिए। आप अपने नेवबार में अपना सर्च बार बना सकते हैं। बूटस्ट्रैप एक खोज बार के साथ एक तैयार नावबार प्रदान करता है, और आप आसानी से कर सकते हैं अपने Django प्रोजेक्ट में बूटस्ट्रैप और उसके घटकों को एकीकृत करें. एक HTML फाइल में अपना सर्च बार बनाएं, फॉर्म मेथड को इस पर सेट करें डाक, और इनपुट फ़ील्ड a दें नाम विशेषता इस प्रकार है:

<प्रपत्रकक्षा="डी-फ्लेक्स"भूमिका="खोज"तरीका="डाक">
 {% csrf_token %}
<इनपुट
वर्ग = "फॉर्म-कंट्रोल मी-एनएन"
प्रकार = "खोजें"
प्लेसहोल्डर = "खोजें"
नाम = "search_query"
आवश्यक एरिया-लेबल = "खोज"
 >
<बटनकक्षा="बीटीएन बीटीएन-रूपरेखा-सफलता"प्रकार="जमा करना">खोजबटन>
प्रपत्र>

उपरोक्त कोड में, इनपुट फील्ड का नाम है प्रश्न खोजना. रूप का प्रयोग करता है Django के सीएसआरएफ टोकन को सीएसआरएफ हमलों को रोकें. अपने खोज बार को कार्यशील बनाने के लिए, इन चरणों का पालन करें।

खोज के लिए एक दृश्य बनाएँ

  • अपनी खोलो view.py फ़ाइल और अपने मॉडल को आयात करें model.py फ़ाइल:
से ।मॉडल आयात मॉडल नाम
  • खोज सुविधा के लिए एक व्यू फंक्शन बनाएं:
डीईएफ़search_feature(अनुरोध):
# जांचें कि क्या अनुरोध एक पोस्ट अनुरोध है।
अगर अनुरोध विधि == 'डाक':
# उपयोगकर्ता द्वारा दर्ज की गई खोज क्वेरी को पुनः प्राप्त करें
search_query = अनुरोध। डाक['प्रश्न खोजना']
# खोज क्वेरी द्वारा अपना मॉडल फ़िल्टर करें
पोस्ट = Model.objects.filter (fieldName__contains=search_query)
वापस करना प्रस्तुत करना (अनुरोध, 'एप्लिकेशन/template_name.html', {'जिज्ञासा':प्रश्न खोजना, 'पद': पोस्ट})
अन्य:
वापस करना प्रस्तुत करना (अनुरोध, 'एप्लिकेशन/template_name.html',{})

उपरोक्त फ़ंक्शन पहले जांचता है कि क्लाइंट भेज रहा है या नहीं डाक अनुरोध। यदि चेक पास हो जाता है, तो यह उपयोगकर्ता की खोज क्वेरी के मूल्य को इस तरह पुनः प्राप्त करने के लिए आगे बढ़ता है:

search_query = अनुरोध। डाक['प्रश्न खोजना']

अनुरोध में। पोस्ट ['search_query'], 'प्रश्न खोजना' आपके खोज बार के इनपुट फ़ील्ड के नाम से प्रतिस्थापित किया जाना चाहिए।

उपयोगकर्ता की खोज क्वेरी के मूल्य को पुनः प्राप्त करने के बाद, फ़ंक्शन का उपयोग करके मॉडल को इसके साथ फ़िल्टर करता है __रोकना तरीका। __रोकना विधि केस-संवेदी है। इस पद्धति का उपयोग करने के लिए, आपको इस प्रारूप का पालन करना चाहिए:

फ़ील्डनाम__ सम्‍मिलित है

उदाहरण के लिए, यदि आप चाहते हैं कि आपके उपयोगकर्ता एक मॉडल फ़ील्ड के आधार पर खोज करें जिसे कहा जाता है नाम, आपको इस तरह दिखने के लिए अपना कोड संशोधित करना चाहिए:

name__contains=search_query

अंत में, फ़ंक्शन एक टेम्पलेट प्रस्तुत करता है और संदर्भ के रूप में खोज क्वेरी और फ़िल्टर किए गए मॉडल को पास करता है।

हालाँकि, यदि प्रपत्र की विधि a नहीं है डाक अनुरोध, फ़ंक्शन एक खाली शब्दकोश के साथ एक टेम्पलेट प्रस्तुत करता है और खोज क्वेरी को संसाधित नहीं करता है।

खोज परिणाम के लिए एक टेम्प्लेट बनाएं

  • अपने खोज परिणामों को क्लाइंट साइड पर लौटाने के लिए एक HTML फ़ाइल बनाएँ।
  • उपयोगकर्ता को देखने के लिए पृष्ठ पर खोज परिणाम आउटपुट करें। आपकी HTML फ़ाइल में कोड इस तरह दिखना चाहिए:
{% अगर क्वेरी%}
<डिव>
<डिव>
खोज क्वेरी के माध्यम से लूप करें
{% पदों में पद के लिए%}
<डिव>
खोज क्वेरी वापस करें
<पी>{{शीर्षक पोस्ट करें}}पी>
डिव>
{% अंत%}
डिव>
डिव>
{% अन्य %}
यदि उपयोगकर्ता खोज क्वेरी दर्ज नहीं करता है तो संदेश वापस करें
<एच 1>कृपया एक खोज प्रश्न दर्ज करेंएच 1>
{% अगर अंत %}

उपरोक्त HTML टेम्प्लेट यह जाँचता है कि क्या उपयोगकर्ता खोज बार में खोज क्वेरी दर्ज करता है। यदि उपयोगकर्ता कोई खोज क्वेरी दर्ज करता है, तो a पाश के लिए खोज परिणामों पर लूप करता है और उन्हें उपयोगकर्ता को लौटाता है। जब कोई खोज क्वेरी नहीं होती है, तो उपयोगकर्ता को खोज क्वेरी दर्ज करने के लिए एक संदेश प्रदर्शित होता है। एक मामला जहां कोई खोज क्वेरी नहीं हो सकती है, यदि आपका उपयोगकर्ता खोज बार में भरे बिना सीधे यूआरएल पर जाता है, यानी आपका उपयोगकर्ता यूआरएल दर्ज करता है जैसे mywebsite.com/search सीधे ब्राउज़र में। उपयोग करना सुनिश्चित करना चाहिए Django के टेम्पलेट विरासत आपकी HTML फ़ाइल में।

  • कोई खोज परिणाम न होने पर त्रुटि संदेश वापस करने के लिए अपने HTML कोड को संशोधित करें।
{% अगर क्वेरी%}
<डिव>
<डिव>
जाँच करें कि क्या डेटाबेस में कोई परिणाम है
{% अगर पोस्ट%}
यदि परिणाम है तो खोज क्वेरी के माध्यम से लूप करें
{% पदों में पद के लिए%}
<डिव>
खोज क्वेरी वापस करें
<पी>{{शीर्षक पोस्ट करें}}पी>
डिव>
{% अंत%}
कोई परिणाम नहीं मिलने पर संदेश लौटाएं।
{% अन्य %}
<h3>कोई खोज परिणाम नहीं मिलाh3>
{% अगर अंत %}
डिव>
डिव>
{% अन्य %}
<एच 1>कृपया एक खोज प्रश्न दर्ज करेंएच 1>
{% अगर अंत %}

नया HTML टेम्पलेट एक बेहतर उपयोगकर्ता अनुभव की अनुमति देता है। डेटाबेस में खोज परिणाम उपलब्ध है या नहीं, यह जांचने के लिए यह एक सशर्त विवरण प्रस्तुत करता है। अगर वहाँ है, यह खोज परिणाम प्रदर्शित करता है; अन्यथा, यह उपयोगकर्ता को एक त्रुटि संदेश भेजता है।

अपने URL पैटर्न कॉन्फ़िगर करें

  • यदि आपने ऐसा नहीं किया है, तो एक बनाएँ urls.py अपनी ऐप निर्देशिका में फ़ाइल करें।
  • आप में urls.py, फ़ाइल अपने खोज पृष्ठ के लिए एक URL प्रतिमान बनाएँ:
से django.urls आयात पथ
से. आयात दृश्य

urlपैटर्न = [
पथ('खोज/', view.search_feature, name='खोज दृश्य'),
]

उपरोक्त कार्यक्रम पहले आयात करता है पथ समारोह और दृश्य ऐप से संबंधित फ़ाइल। फिर यह नाम का रास्ता बनाता है खोज दृश्य खोज पृष्ठ के लिए।

  • अपने खोज बार में फ़ॉर्म क्रिया जोड़ें। क्रिया URL को खोज दृश्य के लिए समर्पित URL पथ की ओर इशारा करना चाहिए। इस मामले में, प्रपत्र इंगित करता है खोज दृश्य.
<प्रपत्रकक्षा="डी-फ्लेक्स"भूमिका="खोज"तरीका="डाक"कार्य="{% url 'खोज-दृश्य' %}">
<इनपुट
वर्ग = "फॉर्म-कंट्रोल मी-एनएन"
प्रकार = "खोजें"
प्लेसहोल्डर = "कुछ खोजें"
नाम = "search_query"
आवश्यक एरिया-लेबल = "खोज"
>
<बटनकक्षा="बीटीएन बीटीएन-रूपरेखा-सफलता"प्रकार="जमा करना">खोजबटन>
प्रपत्र>

आपके खोज URL पथ की ओर इशारा करते हुए फ़ॉर्म क्रिया के बिना, आपकी खोज सुविधा काम नहीं करेगी। याद रखें कि आपका खोज URL पथ Django दृश्य को इंगित करना चाहिए जो आपकी खोज सुविधा के तर्क को संभालता है।

एकाधिक मॉडल फ़ील्ड के लिए एक खोज सुविधा बनाएँ

यदि आप अपने वेब ऐप के उपयोगकर्ता अनुभव को बेहतर बनाना चाहते हैं, तो आप अपने उपयोगकर्ताओं को अपने मॉडल में एक से अधिक फ़ील्ड द्वारा खोज करने दे सकते हैं। उदाहरण के लिए, किसी ब्लॉग ऐप में, हो सकता है कि आप चाहें कि आपका उपयोगकर्ता पोस्ट शीर्षक या लेखक के नाम के आधार पर खोज करे।

इस सुविधा को लागू करने के लिए, आपको इसका उपयोग करना चाहिए क्यू Django द्वारा प्रदान की गई वस्तु। आपको आयात करना चाहिए क्यू अपने में वस्तु view.py फ़ाइल इस तरह:

से django.db.models आयात क्यू

आयात करने के बाद क्यू, आपको अपने व्यू फ़ंक्शन को इस तरह संशोधित करना चाहिए:

डीईएफ़search_post(अनुरोध):
अगर अनुरोध विधि == 'डाक':
search_query = अनुरोध। डाक['प्रश्न खोजना']
पोस्ट = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
वापस करना प्रस्तुत करना (अनुरोध, 'एप्लिकेशन/template_name.html', {'जिज्ञासा':प्रश्न खोजना, 'पद': पोस्ट})
अन्य:
वापस करना प्रस्तुत करना (अनुरोध, 'एप्लिकेशन/template_name.html',{})

उपरोक्त कार्यक्रम में, पदों चर मॉडल को पोस्ट शीर्षक या लेखक के नाम से फ़िल्टर करता है। समारोह का उपयोग करता है या ऑपरेटर - इस मामले में, एक पाइप प्रतीक - फ़िल्टर करने के लिए।

खोज सुविधा के साथ उपयोगकर्ता अनुभव में सुधार करना

आपके वेब एप्लिकेशन में एक खोज सुविधा प्रभावी रूप से इसके उपयोगकर्ता अनुभव और समग्र उपयोगिता में सुधार करती है। Django के साथ, आपको केवल अपनी खोज सुविधा को काम करने के लिए अंतर्निहित कार्यात्मकताओं का लाभ उठाने की आवश्यकता है, जिससे आपको और आपके उपयोगकर्ताओं को महत्वपूर्ण लाभ मिलते हैं।