Как создать несколько страниц, если их слишком много для одной страницы?

Я работаю над проектом на 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">&laquo; 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 &raquo;</a>
        {% endif %}
    </span>
</div>

Кроме того, я рекомендую вам прочитать документацию по этой теме: https://docs.djangoproject.com/fr/4.0/topics/pagination/

Вернуться на верх