मैं django में एक विस्तृत दृश्य बनाने की कोशिश कर रहा हूं, लेकिन टेम्पलेट में कुछ भी प्रदर्शित नहीं होता है।

View.py

class MyDetailView(DetailView):
    model = Article
    template_name = 'detail.html'

विवरण.html

{% extends 'base.html' %}
{% load i18n %}
{% endblock %}

{% block content %}

{% for item in itemlist %}
{{item.pk}}
{{item.title}}

{% empty %}
There are no items in this list

{% endfor %}
{% endblock %}

यहाँ टेम्पलेट में कुछ भी क्यों प्रदर्शित नहीं होता है?

1
Snowball 26 मार्च 2020, 21:41
2
एक DetailView में कोई itemlist टेम्पलेट में पास नहीं हुआ है, (और एक ListView न तो)।
 – 
Willem Van Onsem
26 मार्च 2020, 21:44

2 जवाब

आप itemlist नाम के आइटम को DetailView में टेम्प्लेट में पास नहीं करते हैं। एक ListView (जो अधिक उपयुक्त लगता है) में, यह डिफ़ॉल्ट रूप से object_list नामक एक संदर्भ चर का उपयोग करेगा। चूंकि वैरिएबल मौजूद नहीं है, इसलिए {% for … %}…{% endfor %} टेम्प्लेट ब्लॉक [Django-doc] को खाली स्ट्रिंग में हल कर दिया जाएगा।

यदि आप Article के क्वेरीसेट को संदर्भ में itemlist नाम से पास करना चाहते हैं, तो आप context_object_name विशेषता [Django-doc ]:

from django.views.generic import ListView

class MyDetailView(ListView):
    model = Article
    template_name = 'detail.html'
    context_object_name = 'itemlist'
1
Willem Van Onsem 26 मार्च 2020, 21:47
मैंने पहले ही कोशिश कर ली है, लेकिन फिर मुझे यह त्रुटि मिलती है TypeError at /detail/5/ 'Article' object is not iterable Request Method: GET Request URL: http://127.0.0.1:8000/detail/5/
 – 
Snowball
26 मार्च 2020, 22:12
शायद ऐसा इसलिए है क्योंकि मेरा यूआरएल? path('detail/<int:pk>/', views.MyDetailView.as_view(), name='detail'),
 – 
Snowball
26 मार्च 2020, 22:13
@ स्नोबॉल: एक DetailView के लिए आइटम निश्चित रूप से चलने योग्य नहीं है, क्योंकि एक लेख, अच्छी तरह से पुनरावृत्तियों का संग्रह नहीं है।
 – 
Willem Van Onsem
26 मार्च 2020, 22:14
@ स्नोबॉल: आपके पास एक DetailView है, आप पहली बार में {% for ... %} लूप का उपयोग क्यों करते हैं?
 – 
Willem Van Onsem
26 मार्च 2020, 23:31

जैसा कि विलेम ने आपको टिप्पणी में बताया था, आप एक विवरण दृश्य में हैं, इसलिए आपको पुनरावृति के लिए लूप की आवश्यकता नहीं है, आप केवल टेम्पलेट में विवरण दिखा सकते हैं जैसे: {{item.pk}}

0
JohnJerry 26 मार्च 2020, 22:16
लेकिन जब मैं ListView का उपयोग करता हूं, तो मेरे पास सभी परिणाम होते हैं और केवल यही नहीं PK जो मैं चाहता हूं
 – 
Snowball
26 मार्च 2020, 22:41