Сортировка и пагинация объекта одновременно в django

У меня такая проблема. При {% for article in page_obj %} пагинация работает корректно, но сортировка сбрасывается на дефолтное значение. Если написать {% for article in article %} перестает работать пагинация. Может кто знает, в чем причина?

views.py:

def news_home(request):
    article = Article.objects.filter(published=True).order_by('-date_published')
    contact_list = Article.objects.get_queryset().order_by('id')
    paginator = Paginator(contact_list, 9)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    return render(request, 'news/news_home.html', {'article': article, 'page_obj': page_obj})

models.py:

class Article(models.Model):
    title_image = models.ImageField("Превью", upload_to='media/', height_field=None, width_field=None)
    title = models.CharField("Название", max_length=82)
    text = models.TextField("Статья")
    date_published = models.DateTimeField("Дата публикаций")
    published = models.BooleanField("Публикация", default=True)

news_home.html:

{% extends 'main/layout.html' %}
{% block title %}Новости{% endblock %}
{% load humanize %}
{% block content %}

<form class="col-md-3 offset-md-9" method=POST action="{% url 'search_news' %}">
    {% csrf_token %}
    <input class="form-control mr-sm-2 rounded-4" type="search" placeholder="Найти новость..." aria-label="Search" name="searched">
</form>

{% if article %}
<div class="bg-container rounded-4">
{% for article in page_obj %}
{% if forloop.counter0|divisibleby:3 %} <div class='container text-wrap text-break rounded-top-4 rounded-bottom-4'> <div class="row row-cols-1 row-cols-md-3"> {% endif %}
<a class='my-3 px-3' href="{% url 'news_detail' article.id %}" style="text-decoration: none; color: black">
    <div class="col">
        <div class="card rounded-4 border-0 ">
            <div class='parent img-hover-zoom rounded-4'>   
                <img src="{{ article.title_image.url }}" class="img-fluid rounded-top-4 mx-auto" style="width:397px; height: 223px;">
                <p class="fs-6 news-title title-img px-2 py-1 bg-white bg-opacity-50 rounded-bottom-4 mb-0 site-header">{{ article.title }}</p> 
                <small class="text-muted date-img p-1 bg-white bg-opacity-50 rounded-start-3 mb-5 site-header">{{ article.date_published|naturalday }}</small> 
            </div>
        </div>
      </div>
    </a>    
{%  if forloop.counter|divisibleby:3 or forloop.last %}</div></div>{% endif %}
{%  endfor %}
</div>
{% else %}
<center>
    <div class="p-4 p-md-4 text-black bg-container container text-wrap text-break rounded-4">
        <div class="col-md-15 px-0">
            <h2>Страница пуста...</h2>
        </div>
    </div>
</center>
{% endif %}

</div>
{% if page_obj.has_other_pages %}
<nav>
    <ul class="pagination justify-content-center mt-3">
        {% if page_obj.has_previous %}
        <li class='page-item'>
            <a class='page-link  text-dark rounded-4 me-4' href="?page={{ page_obj.previous_page_number }}">&lt;</a>
        </li>
        {% endif %}
        {% for p in page_obj.paginator.page_range %}
        {% if page_obj.number == p %}
        <li class="page-item active text-dark">
            <a class="page-link  text-dark rounded-4 ms-2">{{ p }}</a>
        </li>
        {% elif p >= page_obj.number|add:-2 and p <= page_obj.number|add:2 %}
        <li class="page-item text-dark"><a class="page-link text-dark rounded-4 ms-2" href="?page={{ p }}">{{ p }}</a></li>
        {% endif %}
        {% endfor %}
        {% if page_obj.has_next %}
        <li class='page-item text-dark'>
            <a class='page-link text-dark rounded-4 ms-4' href="?page={{ page_obj.next_page_number }}">&gt;</a>
        </li>
        {% endif %}
    </ul>
</nav>
{% endif %}
{% endblock %}

Ответы (0 шт):