Сортировка и пагинация объекта одновременно в 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 }}"><</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 }}">></a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
{% endblock %}