Paginate комментарии к сообщениям - PullRequest
1 голос
/ 08 июля 2019

У меня есть форма комментария для моих сообщений. Похоже, это

view.py

def add_comment_to_post(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.author = request.user
            #comment.author.photo = object.author.profile.image.url
            comment.save()
            return redirect('Post-detail', pk=post.pk)
    else:
        form = CommentForm()
    return render(request, 'blog/add_comment_to_post.html', {'form': form})

models.py

class Comment(models.Model):
    post = models.ForeignKey('blog.Post', on_delete=models.CASCADE, related_name='comments')
    author = models.CharField(max_length=20)
    text = models.TextField(max_length=200, verbose_name='内容')
    created_date = models.DateTimeField(default=timezone.now)
    approved_comment = models.BooleanField(default=False)

    def approve(self):
        self.approved_comment = True
        self.save()

    def __str__(self):
        return self.text

forms.py

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = ('text',)
        widgets = { #size of textbox
          'text': forms.Textarea(attrs={'rows':4}),
        }

Где мне добавить функцию нумерации страниц в мои комментарии, чтобы она работала? У меня есть нумерация страниц для моих постов, но посты используют класс DetailView, и я не знаю, как заставить его работать для комментариев function

Ответы [ 2 ]

1 голос
/ 08 июля 2019

В основном вам нужно сделать это в представлении Post-detail. Поскольку DetailView не предоставляет нумерацию страниц, вам необходимо предоставить их самостоятельно. Вы можете переопределить метод получения контекста. Например:

from django.core.paginator import <b>Paginator</b>

class PostDetailView(DetailView):
    ...
    def get_context_data(self):
        context = super(PostDetailView, self).get_context_data()
        <b>_list = Comment.objects.filter(post=self.kwargs.get('pk'))
        paginator = Paginator(_list, 25) # Show 25 contacts per page
        page = request.GET.get('page')
        context['comments'] = paginator.get_page(page)
        return context</b>

И выводить комментарии в шаблоне так:

<div class="pagination">
    <span class="step-links">
        {% if comments.has_previous %}
            <a href="?page=1">&laquo; first</a>
            <a href="?page={{ comments.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ comments.number }} of {{ comments.paginator.num_pages }}.
        </span>

        {% if contacts.has_next %}
            <a href="?page={{ comments.next_page_number }}">next</a>
            <a href="?page={{ comments.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>

Более подробную информацию можно найти также в documentation.

0 голосов
/ 08 июля 2019

Вот как это можно сделать.

from rest_framework.pagination import PageNumberPagination

# Create a custom pagination class.
class CommentPagination(PageNumberPagination):
    page_size = 1000
    page_size_query_param = 'page_size'
    max_page_size = 10000
# Define the Pagination class in PostDetailView.
class PostDetailView(DetailView):
     pagination_class = CommentPagination

# This is how api can be called.
# something.com/comment/?page=4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...