Как создать несколько страниц, если их слишком много для одной страницы?
Я работаю над проектом на django, пытаясь создать форум. Когда на одной странице достигается определенное количество объектов (тем-обзоров), я хочу, чтобы создавалась вторая (а затем третья и т.д.) страница и некоторые из этих объектов переходили на следующие страницы (страница 2, затем страница 3 и т.д.) и url для второй страницы должен быть чем-то вроде "mysite.com/fourum/topic/2" и т.д.
А затем должны быть кнопки для перехода на страницу 2, страницу 3 и т.д.
Это будет соответствующий код:
gaming.html
{% extends "forum/index.html" %}
{% load static %}
{% block title %} Gaming {% endblock %}
{% block content %}
<div class="main-container">
<h1 class="heading">Forum: Gaming</h1>
{% for obj in object %}
<div class="username">{{obj.username}}</div>
<div class="date">{{obj.date}}</div>
<div class="topic">{{obj.topic}}</div>
<div class="title"><a class="link" href="{{obj.slug_titel}}">{{obj.title}}</a></div>
<div class="content">{{obj.content}}</div>
{% endfor %}
</div>
{% endblock %}
views.py
def gaming(request):
obj = Threads.objects.filter(topic="gaming")
context = {
"object": obj,
}
return render(request, "forum/gaming.html", context)
Мне кажется, то, что вы описали, похоже на django pagination.
С вашей точки зрения, что-то вроде следующего могло бы сработать :
...
from django.core.paginator import Paginator
...
def gaming(request):
threads = Threads.objects.filter(topic="gaming")
paginator = Paginator(threads, 25) # Show 25 contacts per page.
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, "forum/gaming.html", {'page_obj': page_obj, **context})
В шаблоне добавьте следующее :
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</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</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
Кроме того, я рекомендую вам прочитать документацию по этой теме: https://docs.djangoproject.com/fr/4.0/topics/pagination/