Показывать сообщения при нажатии на тег (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 %}