Переключение предыдущего и следующего блога с помощью представления на основе классов в django

Если я открываю деталь блога, то в качестве пагинации должен быть заголовок предыдущего и следующего блога. В документации Django я реализовал пагинацию по номеру страницы. Но как я могу реализовать пагинацию по названию предыдущего и следующего блога.

Вот мой model.py:

class Post(models.Model):
    title = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(max_length=250, unique=True, null=True, blank=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="blog_posts")
    cover = models.ImageField(upload_to="Uploaded/")
    content = RichTextUploadingField(blank=True, null=True)
    sticker = models.CharField(max_length=50, unique=False, null=True, blank=True)
    published_at = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)
    status = models.IntegerField(choices=STATUS, default=0)
    tags = models.CharField(max_length=400, null=True, blank=True)

    class Meta:
        ordering = ['-published_at']
    
    def __str__(self):
        return self.title
    

views.py

class PostDetail(generic.DetailView):
    model = Post
    template_name = 'blogs/post_detail.html'

post_detail.html

{% extends "blogs/base.html" %}
{% load static %}
{% block post %}
<section class="services">
    <dev class="box-container">
        <div class="box-lg">
            <h3>{{ post.title }}</h3>
            <img src="/Images/{{ post.cover }}"  >
            <hr>
            <small>{{ post.published_at }}</small>
            <p>{{ post.content | safe }}</p>
        </div>
    </dev>
</section>

<!-- Pagination Start -->
<div class="center">
</div>
<!-- Pagination Ends -->
{% endblock post %}

Помогите, пожалуйста, как сделать пагинацию заголовков блога prev-next, как на картинке ниже!

заглавное изображение пагинации

Один из способов справиться с этим - использовать .get_previous_by_Foo and .get_next_by_Foo подробнее вы можете прочитать здесь : https://docs.djangoproject.com/en/2.1/ref/models/instances/#django.db.models.Model.get_next_by_FOO

Это просто идея, как вы можете это сделать.

{% extends "blogs/base.html" %}
{% load static %}
{% block post %}
<section class="services">
    <dev class="box-container">
        <div class="box-lg">
            <h3>{{ post.title }}</h3>
            <img src="/Images/{{ post.cover }}"  >
            <hr>
            <small>{{ post.published_at }}</small>
            <p>{{ post.content | safe }}</p>
        </div>
    </dev>
</section>

<!-- Pagination Start -->
<div class="center">
{{ post.get_previous_by_published_at.title }}
</div>
<!-- Pagination Ends -->
<div class="center">
{{ post.get_next_by_published_at.title }}
</div>

{% endblock post %}

Как я уже сказал, это просто идея, в реальной жизни вам нужно проверить, что следующее или предыдущее сообщение существует или, возможно, это сообщение является последним, и тому подобное...

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