Разбиение по представлениям на основе классов в Django не работает - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь использовать нумерацию страниц для разбиения на страницы на одной из моих страниц. Я пробовал несколько разных методов, которые я нашел в Интернете, но по какой-то причине, когда я использую paginate_by = 3, он на самом деле ничего не разбивает на страницы, но все же показывает HTML-код для разбивки на страницы внизу страницы.

Вид:

class SearchListView(ListView):
    model = Post
    template_name = "public/search.html"
    paginate_by = 3

HTML:

{% extends 'public/base.html' %}
{% load staticfiles %}

{% block head %}
<link rel="stylesheet" type="text/css" href="{% static "public/css/search.css" %}" />
{% endblock %}

{% block content%}
<div class="search container-fluid">
    <img src="/media/about-us.jpg" alt="">
    <div class="search-title">
        <h1 class="title">Search</h1>
    </div>
    <div class="search-main mb-5">
        <form method='GET' action=''>
            <input type="text" name='q' class="homebanner-search" placeholder="Enter your keywords" value='{{ request.get.q }}'>
        </form>
    </div>
</div>
<div class="container mt-5 mb-5">
    <div class="detail-container">
        {% for post in queryset %}
        <a href="{% url 'post-detail' post.slug %}">
            <div class="post-main">
                <div class="post-image">
                    <img src="{{ post.image.url }}" class="card-img-top" alt="#">
                    <p class="post-category">{{ post.category }}</p>
                </div>
                <div class="post-body">
                    <div class="post-title">
                        <p class="post-title-p">Day in the life of {{ post.title }}</p>
                    </div>
                    <div class="post-text">
                        <p class="post-author-text text-muted">{{ post.sub_description|truncatewords:22 }}</p>
                    </div>
                    <div class="post-button">
                        <p>READ MORE ></p>
                    </div>
                </div>
            </div>
        </a>
        {% endfor %}
    </div>
    <div id="page_navigation" >
        {% if is_paginated %}
        <ul class="pagination">
            {% if page_obj.has_previous %}
                <li><a href="?q={{ request.GET.q }}?page={{ page_obj.previous_page_number }}">&laquo;</a></li>
            {% else %}
                <li class="disabled"><span>&laquo;</span></li>
            {% endif %}
            {% for i in paginator.page_range %}
                {% if page_obj.number == i %}
                    <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
                {% else %}
                    <li><a href="?q={{ request.GET.q }}?page={{ i }}">{{ i }}</a></li>
                {% endif %}
            {% endfor %}
            {% if page_obj.has_next %}
                <li><a href="?q={{ request.GET.q }}?page={{ page_obj.next_page_number }}">&raquo;</a></li>
            {% else %}
                <li class="disabled"><span>&raquo;</span></li>
            {% endif %}
        </ul>
        {% endif %}
    </div>
</div>
{% endblock %}

Таким образом, на странице должны отображаться 3 элемента, и разбиение на страницы должно привести меня к следующему набору 3. HTML-код показывает, и когда я нажимаю на ссылки, он занимает 2 страницы 2. Проблема заключается в Дело в том, что отображается 6 элементов, а не 3, и когда я перехожу на страницу 2, там отображаются те же 6 элементов.

1 Ответ

0 голосов
/ 07 мая 2019

К сожалению, я не смог точно воспроизвести вашу ошибку, но произошло то, что мои объекты не рендерились при циклическом просмотре queryset.Поэтому я бы порекомендовал вместо этого попробовать object_list:

{% for post in object_list %}
    {{ post.name }}
{% endfor %}

Еще одна вещь, которую вы можете сделать, это добавить аргумент context_object_name к вашему представлению:

class SearchListView(ListView):
    model = Post
    template_name = "public/search.html"
    paginate_by = 3
    context_object_name = 'posts'

и затем выполнить циклчерез это:

{% for post in posts %}
    {{ post.name }}
{% endfor %}

Кроме того, я не могу представить, что форма поиска делает на этой странице, поскольку модель ListView (Post) - это набор запросов, а не то, что ищется?Так что, возможно, ссылка href вызывает некоторые проблемы.Может быть, вместо этого попробуйте что-то вроде этого:

<li><a href="{{ request.get_full_path }}?page={{ page_obj.previous_page_number }}">&laquo;</a></li>

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

...