2025, Oct 03 01:31

Django में लोकल JSON फ़ाइल लोड कर टेम्पलेट में दिखाएँ

सीखें assets/jsons/quotes.json जैसी लोकल JSON फ़ाइल को Django view में json.load से डीसिरियलाइज़ कर context में पास करना और टेम्पलेट में emp_details रेंडर करना.

Django टेम्पलेट में JSON दिखाना आसान है, बशर्ते आप डेटा फ़्लो सही तरह से जोड़ें। आमतौर पर दिक्कत तब आती है जब view से JSON लोड और पास किए बिना ही टेम्पलेट या क्लाइंट‑साइड स्क्रिप्ट का इस्तेमाल कर लिया जाता है। नीचे एक संक्षिप्त गाइड है जो बताती है कि लोकल JSON फ़ाइल कैसे पढ़ें, सर्वर पर json.load से उसे डीसिरियलाइज़ करें, और उसकी वैल्यूज़ Django टेम्पलेट में रेंडर करें।

समस्या का सार

JSON फ़ाइल assets/jsons/quotes.json पर है और emp_details के अंदर एक सूची रखती है, जिसमें emp_name, email और job_profile जैसे फ़ील्ड हैं। होमपेज वाला view बिना कोई डेटा जोड़े सीधे टेम्पलेट लौटाता है, इसलिए टेम्पलेट के पास दिखाने के लिए कुछ नहीं है।

समस्या का कोड उदाहरण

वह view फ़ंक्शन जो पेज तो रेंडर करता है, लेकिन JSON न लोड करता है, न पास:

from django.shortcuts import render
def start_page(req):
    return render(req, 'homepage.html')

टेम्पलेट स्निपेट जो क्लाइंट साइड पर कुछ करने की कोशिश करता है, लेकिन सर्वर से कोई डेटा मिलता ही नहीं:

{% block content %}
<script type="text/javascript">
    console.log(json1_data);
</script>
<h1>Home</h1>
<p id="demo"></p>
{% endblock %}

असल समस्या क्या है

View न तो फ़ाइल लोड करता है और न ही टेम्पलेट के लिए कोई context वैरिएबल जोड़ता है जिस पर लूप चलाया जा सके। Context के बिना टेम्पलेट को emp_details के बारे में पता ही नहीं होता, इसलिए डेटा एक्सेस करने की हर कोशिश खाली आउटपुट देगी। समाधान यह है कि JSON को सर्वर पर पढ़ें और डीसिरियलाइज़ करें, फिर टेम्पलेट के साथ render में पास करें।

समाधान: लोड करें, डीसिरियलाइज़ करें और कॉन्टेक्स्ट पास करें

View में json.load से फ़ाइल पढ़ें और बना हुआ Python ऑब्जेक्ट टेम्पलेट के context में भेजें। फिर टेम्पलेट में emp_details पर इटरेट करें।

सुधारा गया view:

from django.shortcuts import render
import json
def main_page(req):
    with open('assets/jsons/quotes.json') as fh:
        payload = json.load(fh)
    return render(req, 'homepage.html', { 'payload': payload })

वह टेम्पलेट जो JSON डेटा रेंडर करता है:

{% block content %}
{% for row in payload.emp_details %}
<section>
<p><strong>{{ row.emp_name }}</strong></p>
<p>{{ row.email }}</p>
<p>{{ row.job_profile }}</p>
</section>
{% endfor %}
{% endblock content %}

URL मैपिंग जो रूट पाथ को उस view से जोड़ती है:

from django.urls import path
from . import views
urlpatterns = [
    path('', views.main_page, name='home'),
]

यह क्यों मायने रखता है

यह छोटा उदाहरण दिखाता है कि Django का request–view–template फ्लो कैसे काम करता है। डेटा को view से आना चाहिए, सर्वर पर तैयार किया जाना चाहिए (यहाँ JSON को डीसिरियलाइज़ करके), और फिर रेंडरिंग के लिए टेम्पलेट तक पहुँचना चाहिए। इस पैटर्न की समझ भरोसेमंद सर्वर‑साइड रेंडरिंग के लिए जरूरी है और उस उलझन से बचाती है जब टेम्पलेट “कुछ करता ही नहीं” लगता है।

निष्कर्ष और व्यवहारिक सुझाव

JSON को view के अंदर पढ़ें और डीसिरियलाइज़ करें, एक साफ़‑सुथरे नाम वाला context वैरिएबल पास करें, और टेम्पलेट में उस पर लूप चलाएँ। फ़ाइल पाथ स्थिर रखें और सुनिश्चित करें कि टेम्पलेट JSON में मौजूद असली keys—जैसे emp_details, emp_name, email और job_profile—का ही संदर्भ दे। अगर यह डेटा स्थिर फ़ाइल से आगे बढ़ना हो, तो क्वेरी और अपडेट आसान बनाने के लिए इसे डेटाबेस में ले जाने पर विचार करें।

यह लेख StackOverflow के एक प्रश्न (लेखक: Theodore Ar.) और Uchenna Adubasim के उत्तर पर आधारित है।