单击标签时显示帖子(django)

Show posts when clicking on a tag (django)

我是django的新手,我遇到了一个我无法解决的问题。

我正在创建一个博客,我希望能够点击一个标签并转到一个新页面,该页面将包含所有带有该标签的帖子。我已经创建了一个页面,其中包含 selected 标签作为 url 中的 slug,但我不知道如何在此页面上显示所有带有该标签的帖子。 我的模型页面:

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)

我的 url 页面:

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")

我使用此功能来呈现页面,但我不知道如何select(并呈现)所有具有特定标签的帖子(准确地说是它们的图像)。

您可以通过以下方式检索帖子:

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

此处 posts 是一个 QuerySet,所有 Post 的标签都带有 tag_slug tags URL 参数.

您应该查询所有带有指定标签的帖子,并通过上下文将其传递给模板

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 %}