Почти точно так же:
from django.core.paginator import <b>Paginator</b>
class PostDetailView(DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super(PostDetailView, self).get_context_data(**kwargs)
page = <b>self.request.GET.get('page')</b>
comments = <b>Paginator(self.object.comment_set.all(), 25)</b>
context['comments'] = comments.<b>get_page(page)</b>
context['comments_number'] = self.object.comment_set.count()
context['form'] = CommentForm()
return context
# ...
Таким образом, мы получаем параметр page
из параметров self.request.GET
, а затем создаем Paginator
и соответствующим образом отображаем его на странице.Вам, вероятно, следует также упорядочить комментарии в соответствии с некоторым полем.Прямо сейчас комментарии могут появляться в любом порядке, и, таким образом, следующая страница может содержать комментарии, которые появились на предыдущей странице и т. Д.
Переменная comments
, таким образом, является объектом разбиения на страницы, и вы можете отобразить его следующим образом:вы работаете в представлении на основе функций.
Обратите внимание, что вы можете использовать comment_set
(или если вы установите другое related_name
, это имя) для доступа к набору атрибутов, связанных с объектом Post
.
При этом, возможно, это больше ListView
над комментариями или FormView
, поскольку вы включаете Form
для комментариев.