Нумерация страниц ListView - Django - PullRequest
0 голосов
/ 23 апреля 2019

Просмотры

class ThreadListView(ListView):
    model = Thread
    template_name = 'forums/thread.html'

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        # Add in a QuerySet of the Thread & Replies
        context['thread'] = Thread.objects.get(pk=self.kwargs['pk'])
        context['reply'] = Thread.objects.get(pk=self.kwargs['pk']).replies.all()
        return context

HTML

{% extends 'forums/base.html' %}

{% block title %} Forum - {{ thread.title }} {% endblock title %}

{% block content %}
<!--Thread real-->
<table class="table table-hover">
    <thead>
        <tr class="table-primary">
            <th class="col-2"><a href="{% url 'threadview' thread.id %}"> {{ thread.title }}</a></th>
            <th scope="col-10" id="content-col"></th>
        </tr>
    </thead>

    <tbody>
        <!--Thread Author and Content-->
        <tr class="table-info">
            <td class="border-right text-center">
                <span>
                    <img class="rounded-circle" style="height: 100px;width: 100px;"
                        src="{{ thread.author.profile.image.url }}"> <br />
                    Username:&emsp;<a href="#">{{ thread.author.username|capfirst }}</a> <br />
                    Ranks:&emsp;
                    <!--Ranks Go Here--> <br />
                    <hr>
                    Posts:&emsp;
                    <!--Posts Go Here--> <br />
                    Badges:&emsp;
                    <!--Badges Go Here--> <br />
                    <hr>
                    Date Joined:&emsp;{{thread.author.date_joined| date:'Y-m-d'}} <br />
                </span>
            </td>

            <td>{{ thread.content }}</td>
        </tr>
        <!--Reply Author and Content-->
        {% for rply in reply %}
        <tr class="table-secondary">
            <td class="border-right text-center">
                <span>
                    <img class="rounded-circle" style="height: 100px;width: 100px;"
                        src="{{ rply.author.profile.image.url }}"> <br />
                    Username:&emsp;<a href="#">{{ rply.author.username|capfirst }}</a> <br />
                    Ranks:&emsp;
                    <!--Ranks Go Here--> <br />
                    <hr>
                    Posts:&emsp;
                    <!--Posts Go Here--> <br />
                    Badges:&emsp;
                    <!--Badges Go Here--> <br />
                    <hr>
                    Date Joined:&emsp;{{thread.author.date_joined| date:'Y-m-d'}} <br />
                </span>
            </td>
            <td>
                <p>{{ rply.content }}</p>
            </td>
        </tr>
        {% endfor %}

    </tbody>
</table>

{% endblock content %}

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

Просмотр списка показывает поток изатем он показывает ответы, которые находятся в этой теме.

Я хочу иметь возможность разбить весь контент на страницы.

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

1 Ответ

1 голос
/ 23 апреля 2019

Сделайте это ListView для Replies и просто используйте paginate_by.

class ThreadListView(ListView):
    model = Reply  #change the model
    template_name = 'forums/thread.html'
    paginate_by = 10  # add pagination on the list

    def get_queryset(self):
        self.thread = Thread.objects.get(pk=self.kwargs['pk'])
        return self.thread.replies.all().order_by('date_posted')


    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        # Add in a QuerySet of the Thread & Replies
        context['thread'] = self.thread
        return context

Затем, в вашем шаблоне, добавьте код для нумерации страниц.Используйте object_list для перебора ответов

...
    <!--Reply Author and Content-->
        {% for rply in object_list %}  
....


<div class="container">
    {% if is_paginated %}
    {% if page_obj.has_other_pages %}
    <ul class="pagination justify-content-center" style="margin:20px 0">
        {% if page_obj.has_previous %}
        <li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">Previous</a></li>
        {% else %}
        <li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
        {% endif %}
        {% for i in page_obj.paginator.page_range %}
        {% if page_obj.number == i %}
            <li class="page-item active"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
        {% else %}
            <li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
        {% endif %}
        {% endfor %}
        {% if page_obj.has_next %}
        <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">Next</a></li>
        {% else %}
        <li class="page-item disabled"><a class="page-link" href="#">Next</a></li>
        {% endif %}
    </ul>
    {% endif %}
{% endif %}
</div>
...