Добавить функцию перехода к странице для пагинации на стороне сервера в Django
У меня есть проект Django, использующий пагинацию на стороне сервера для некоторой таблицы.
Пользователь хочет, чтобы я добавил функцию перехода к странице, которую он выбирает, независимо от того, выпадающий список или поле ввода.
Browse_and_adopt.html:
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
 <a href="?page=1">« First Page</a>
 <a href="?page={{ page_obj.previous_page_number }}">Previous Page</a>
{% endif %}
<span class="current">
 Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
 <a href="?page={{ page_obj.next_page_number }}">Next Page</a>
 <a href="?page={{ page_obj.paginator.num_pages }}">Last Page»</a>
{% endif %}
</span>
</div>
view.py:
@csrf_exempt
def search_book(request):
global Title_list_cache
if request.method == 'POST':
print(request.POST)
search_keyword = request.POST.get('search_keyword', '')
print(search_keyword)
Title_list = Title.objects.filter(Q(Format_issued="eText") | Q(Format_issued="Print"), title__icontains=search_keyword).select_related('publisher').order_by('title') | Title.objects.filter(Q(Format_issued="eText") | Q(Format_issued="Print"), author__icontains=search_keyword).select_related('publisher').order_by('title') | Title.objects.filter(Q(Format_issued="eText") | Q(Format_issued="Print"), vbid__icontains=search_keyword).select_related('publisher').order_by('title') | Title.objects.filter(Q(Format_issued="eText") | Q(Format_issued="Print")).select_related('publisher').filter(publisher_id__name=search_keyword).order_by('title')| Title.objects.filter(Q(Format_issued="eText") | Q(Format_issued="Print"), description__icontains=search_keyword).select_related('publisher').order_by('title')
Title_list_cache = Title_list
else:
Title_list = Title_list_cache
page = request.GET.get('page', 1)
paginator = Paginator(Title_list, 10)
try:
Titles = paginator.page(page)
except PageNotAnInteger:
Titles = paginator.page(1)
except EmptyPage:
Titles = paginator.page(paginator.num_pages)
query_results_2 = Semester.objects.all()
page_obj = paginator.get_page(page)
query_results_code = CourseInfo.objects.none()
if request.user.is_authenticated:
username = request.user.username
user_id = User.objects.get(username=username).id
#user_id = 1 #test
discipline_queryset = Discipline.objects.filter(hop1_id=user_id) | Discipline.objects.filter(hop2_id=user_id) | Discipline.objects.filter(executive_id=user_id) | Discipline.objects.filter(executive2_id=user_id) | Discipline.objects.filter(executive3_id=user_id)
print(discipline_queryset)
for discipline in discipline_queryset:
id = Discipline.objects.only('id').get(name=discipline).id
query_results_code = query_results_code | CourseInfo.objects.filter(discipline_id=id).values(
'discipline_code', 'code').distinct().order_by('discipline_code')
print(query_results_code)
return render(request, 'bms/inbox/Browse_and_adopt.html', {'Titles': Titles, 'page_obj': page_obj, 'query_results_2':query_results_2, 'query_results_code':query_results_code})
Как я могу достичь этой функции?
В качестве параметра можно передать номер страницы, которая должна попасть в url. Обратите внимание, что если переданный параметр превышает общее количество страниц, то будет обслуживаться последняя доступная страница
eg:
#custom button to get yo specific page
<li class="page-item">
<a href="{% url 'appname:function_name' %}?page=[page number user wants to go]">
<span class="page-link">{{all_shop_products.number|add:"1" }}</span>
</a>
</li>