TemplateView
является представлением на основе классов, поэтому вы создаете его подкласс с помощью class
.
class BlogViews(TemplateView):
def get(self, request):
posts = Post.objects.all().order_by("-posted_date")[:25]
args = {
'posts' : posts,
}
return render(request, 'blog/blog.html', args)
Затем используйте .as_view()
в шаблоне URL.
path('', BlogViews.as_view(), name='blog'),
Избегайте переопределения get
или post
для представлений на основе классов.В итоге вы теряете функциональность родительского класса или дублируете его.Вы можете взять ListView.as_view(...)
в качестве отправной точки для представления, например:
class BlogView(ListView):
template_name="blog/blog.html"
def get_queryset(self):
# Use get_queryset instead of queryset because you want timezone.now()
# to be called when the view runs, not when the server starts
return Post.objects.filter(posted_date__lte=timezone.now()).order_by("-posted_date")[:25]
В вашем случае может быть проще использовать представление на основе функций:
def blog_view(request):
posts = Post.objects.all().order_by("-posted_date")[:25]
args = {
'posts' : posts,
}
return render(request, 'blog/blog.html', args)
Затем включите его в URL с:
path('', blog_view, name='blog'),