का उपयोग करने के लिए जब मैं ब्लॉग एप्लिकेशन में Django के क्लास आधारित जेनेरिक दृश्यों का उपयोग कर रहा हूं। मेरे विचारों में से एक पोस्ट की एक सूची प्रदर्शित करता है जिसमें एक निश्चित टैग होता है। मैं इस दृश्य को टैग द्वारा फ़िल्टर किए गए पदों के ListView
के रूप में लिख सकता हूं। या मैं इस दृश्य को टैग के DetailView
के रूप में लिख सकता हूं, और संदर्भ में प्रासंगिक पोस्ट जोड़ सकता हूं।Django जेनेरिक दृश्य: ListView बनाम DetailView
एक और तरीका उचित है - या पाइथोनिक - दूसरे की तुलना में?
ListView
दृष्टिकोण अधिक अर्थपूर्ण प्रतीत होता है, क्योंकि जो मैं चाहता हूं वह सूची पदों की सूची है, लेकिन यह थोड़ा और जटिल भी है। यह आवश्यक है कि मैं दो तरीकों को ओवरराइट करता हूं। DetailView
दृष्टिकोण केवल मुझे एक विधि को ओवरराइट करने की आवश्यकता है।
class PostTagView(ListView):
"""Display all blog posts with a given tag."""
queryset = Post.objects.published()
def get_context_data(self, **kwargs):
context = super(PostTagView, self).get_context_data(**kwargs)
context['tag'] = get_object_or_404(Tag, slug=self.kwargs['slug'])
return context
def get_queryset(self, **kwargs):
queryset = super(PostTagView, self).get_queryset()
return queryset.filter(tags__slug=self.kwargs['slug'])
class TagDetailView(DetailView):
"""Display all blog posts with a given tag."""
model = Tag
def get_context_data(self, **kwargs):
context = super(TagDetailView, self).get_context_data(**kwargs)
context['object_list'] = Post.objects.published().filter(tags__slug=self.kwargs['slug'])
return context
यूआरएल पैरामीटर के साथ मिलान करना समझ में आता है। – user1272534
ग्रेट उत्तर। अब आप इसे कैसे पगड़ेंगे? सूची दृश्य का उपयोग करना, यह छोटा है। इसे विस्तार से देखने के रूप में, मैं खो गया :( –
@ डैनगैले: एक 'DetailView' को अंकनित नहीं किया जाना चाहिए, इसका उद्देश्य केवल एक ऑब्जेक्ट के साथ उपयोग करना है। –