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.