Показывать сообщения при нажатии на тег (django)

Я новичок в django и столкнулся с проблемой, которую не могу решить.

Я создаю блог и хочу иметь возможность нажать на тег и перейти на новую страницу, на которой будут все посты с этим тегом. Я уже сделал страницу, которая имеет выбранный тег в качестве slug в url, но я не знаю, как показать все посты с этим тегом на этой странице. Моя страница моделей:

class Tag(models.Model):
    caption = models.CharField(max_length=30)
    tag_slug = models.SlugField(unique=True, db_index=True, null=True)

class Post(models.Model):
    title = models.CharField(max_length = 150)
    image_name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True, db_index=True)
    tags = models.ManyToManyField(Tag)

Моя страница урлов:

urlpatterns = [
    path("", views.starting_page, name = "starting-page"),
    path("posts", views.posts, name = "posts-page"),
    path("posts/<slug:slug>", views.post_detail, name = "posts-detail-page"),
    path("posts/tag/<slug:tags>", views.post_tag, name = "post-tag-page"), 
   
]

и функция, которую я создал для рендеринга этого:

  def post_tag (request, tags):
        identified_tag = get_object_or_404(Tag, tag_slug=tags)
        return render (request, "blog/post-tags.html")

Я использую эту функцию для рендеринга страницы, но я не знаю, как выбрать (и рендерить) все посты (точнее, их изображения), которые имеют определенный тег.

Вы можете получить сообщения с помощью:

def post_tag (request, tags):
    posts = Post.objects.filter(tags__tag_slug=tags)
    return render (request, 'blog/post-tags.html', {'posts': posts})

Здесь posts представлен QuerySet со всеми Post, которые имеют тег с таким tag_slug параметром URL, как tags.

Вы должны запросить все посты с указанным тегом и передать его в шаблон через контекст

def post_tag (request, tags):
    identified_tag = get_object_or_404(Tag, tag_slug=tags)
    posts = Post.objects.filter(tag=identified_tag).all()
    return render(request, "blog/post-tags.html", {"posts": posts})

В вашем шаблоне вы можете получить доступ к постам следующим образом

{% for post in posts %}
  {{ post.title }}
{% endfor %}
Вернуться на верх