Отображать последние новости отдельно от других

#python #django

#python #django

Вопрос:

Я хочу отображать последние новости на одной странице отдельно, а все остальные ниже, но я не знаю, как это можно сделать.

views.py

 class PostsView(ListView):
model = Post
queryset = Post.objects.all().order_by('-date')
template_name = 'post/posts.html'
  

urls.py

 urlpatterns = [
    path('', views.PostsView.as_view()),
    path('<int:pk>', views.PostView.as_view()),
    path('add/', views.PostFormView.as_view(), name='add'),
]
  

Комментарии:

1. Ну, почему бы просто не написать два набора запросов, один для запроса последнего сообщения, а другой для запроса всех сообщений?

Ответ №1:

Если вы хотите размещать их на отдельных страницах, у вас должны быть два отдельных представления и URL-адреса, например:

Все новости:

 class PostsViewAll(ListView):
    model = Post
    queryset = Post.objects.all().order_by('-date')
    template_name = 'post/posts_all.html'
  

Последние новости:

 class PostsViewLatest(ListView):
    model = Post
    queryset = Post.objects.all().order_by('-date')[:5]
    template_name = 'post/posts_latest.html'
  

И отдельные URL-адреса:

 urlpatterns = [
    path('all', views.PostViewAll.as_view()),
    path('latest/', views.PostViewLatest.as_view()),
]
  

Или, если вы хотите разместить их на одной странице, у вас есть только одно представление и URL, и вы можете перезаписать get_context_data , чтобы получить разные наборы запросов.

Ответ №2:

Как сказано в комментарии, вы можете создать два набора запросов. вот так:

Для всех сообщений:

 queryset = Post.objects.all().order_by('-date')  
  

Для последних сообщений:

 queryset2 = queryset[:5]