Фильтр количества неработающих страниц django
У меня есть страница, где будет отображаться информация, которая находится в моей базе данных в виде таблицы, я делаю фильтрацию, чтобы когда список становится очень длинным, по крайней мере, он может быть разделен на разные страницы вместо того, чтобы пользователь прокручивал его, но я пробовал и ничего не вышло, не уверен, правильно ли я делаю или нет.
Это то, что я хотел, как показано на рисунке ниже, но оно не отображается.
ViewMCO.html
views.py
@login_required()
def ViewMCO(request):
search_post = request.GET.get('q')
if (search_post is not None) and search_post:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(
Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(status__icontains=search_post)
| Q(serialno__icontains=search_post))
if not allusername:
allusername = Photo.objects.all().order_by("-Datetime")
else:
allusername = Photo.objects.all().order_by("-Datetime")
page = request.GET.get('page', 1)
paginator = Paginator(allusername, 10)
try:
allusername = paginator.page(page)
except PageNotAnInteger:
allusername = paginator.page(1)
except EmptyPage:
allusername = paginator.page(paginator.num_pages)
context = {'allusername': allusername}
return render(request, 'ViewMCO.html', context)
в вашем views.py есть проблема с отступами, и вы должны передать search_post в шаблоне
@login_required()
def ViewMCO(request):
search_post = request.GET.get('q')
if (search_post is not None) and search_post:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(
Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(status__icontains=search_post)
| Q(serialno__icontains=search_post))
if not allusername:
allusername = Photo.objects.all().order_by("-Datetime")
page = request.GET.get('page')
paginator = Paginator(allusername, 10)
try:
allusername = paginator.page(page)
except PageNotAnInteger:
allusername = paginator.page(1)
except EmptyPage:
allusername = paginator.page(paginator.num_pages)
context = {'allusername': allusername,'query':search_post}
return render(request, 'ViewMCO.html', context)
else:#if search_post is None
return redirect('somewhere')
и теперь в вашем шаблоне есть над чем поработать.
измените это
{% if allusername.has_other_pages %}
<ul class="pagination">
{% if allusername.has_previous %}
<li><a href="?page={{ allusername.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in allusername.paginator.page_range %}
{% if allusername.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if allusername.has_next %}
<li><a href="?page={{ allusername.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
to
{% if allusername.has_other_pages %}
<ul class="pagination">
{% if allusername.has_previous %}
<li><a href="?q={{ query|urlencode }}&page={{ allusername.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in allusername.paginator.page_range %}
{% if allusername.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?q={{ query|urlencode }}&page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if allusername.has_next %}
<li><a href="?q={{ query|urlencode }}&page={{ allusername.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
Что я изменил в пагинации, так это то, что я передал 'query' в шаблоне и использую urlencode.