vistas tutorial queryset genericas formularios createview avanzados python django django-views django-generic-views

python - tutorial - Vistas genéricas de Django: cuándo usar ListView frente a DetailView



formularios avanzados django (2)

Estoy usando vistas genéricas basadas en clases de Django en una aplicación de blog. Una de mis vistas muestra una lista de publicaciones que tienen cierta etiqueta. Puedo escribir esta vista como un ListView de publicaciones, filtrado por etiqueta. O puedo escribir esta vista como DetailView de la etiqueta y agregar las publicaciones relevantes al contexto.

¿Es una de las formas más adecuada, o Pythonic, que la otra?

El enfoque de ListView parece más semántico, porque lo que quiero es una lista de publicaciones, pero también es un poco más complejo. Requiere que sobrescriba dos métodos. El enfoque de DetailView solo requiere que sobrescriba un método.

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


Como regla general, mira los parámetros en la URL. Si está utilizando una Tag de una Tag , probablemente se trate de un DetailView y no de un ListView .

En este caso, el segundo enfoque usa menos código y es más elegante. Sin embargo, también depende de lo que va a hacer con la vista más adelante. Si va a agregar formularios para editar las publicaciones, podría tener sentido usar un ListView lugar. Pero no hay ninguna razón técnica para preferir uno sobre el otro, es solo que podrías terminar escribiendo más código en un enfoque que en el otro.


Interesante pregunta. Lamentablemente, la respuesta no es tan interesante: lo que sea más lógico para ti y tu aplicación. Los argumentos pueden hacerse por igual para cualquiera de los enfoques, por lo que en realidad es solo una decisión.