如何在我的模板中显示喜欢和我的帖子?
Posted
技术标签:
【中文标题】如何在我的模板中显示喜欢和我的帖子?【英文标题】:How do I show the likes & my post in my template? 【发布时间】:2021-03-01 13:15:04 【问题描述】:我在models.py
文件中创建了两个模型。我还创建了一个视图,该视图呈现一个名为 index.html
的模板。我想在我的索引网页/模板中显示帖子,它的喜欢计数。但下面的代码不起作用。
models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=42)
author = models.ForiegnKey(User, on_delete=models.CASCADE, related_name='author_user')
create_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'self.author.first_name self.author.last_name'
class Like(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='liked_post')
user = models.Foreignkey(User, on_delete=models.CASCADE, related_name='post_liked_by')
def __str__(self):
return f'self.user.username@self.post.title'
views.py
from django.shortcuts import render
from .models import *
def index(request):
posts = Post.objects.all()
likes = Like.objects.all()
context =
'posts': posts,
'likes': likes,
return render(request, 'index.html', context)
index.html
<html>
<head>
<title>
Home
</title>
</head>
<body>
% for post in posts %
<h1>
post.title
</h1>
<p>
Author: post.author.first_name post.author.last_name
</p>
<p>
Date Created: post.create_date
</p>
<p>
<i class="fa fa-heart"></i>
len(likes)
</p>
% endfor %
</body>
</html>
提前谢谢你。
【问题讨论】:
【参考方案1】:您可以使用 _set 访问反向关系,因此您可以在模板中执行类似操作,然后使用 css 随意设计它
% for post in posts %
<h1>
post.title
</h1>
<span> Number of likes: post.like_set.count()</span>
我建议你通过这个https://docs.djangoproject.com/en/3.1/topics/db/queries/
【讨论】:
【参考方案2】:您将返回所有 Post
对象和所有 Like
对象,彼此独立:
posts = Post.objects.all()
likes = Like.objects.all()
context =
'posts': posts,
'likes': likes,
您需要在Post
对象上使用prefetch_related
。在此处查看文档:
所以你会这样做:
posts = Post.objects.prefetch_related('like_set').all()
然后您可以在模板中引用post.like_set
。无需单独查询Like
,现在您可以按照您需要的方式“加入”信息,而不是在模板中连接两个不同的数据集时遇到问题。
但是在这种情况下,我认为这不是您真正想要做的。您正在尝试显示点赞数,对吧?
既然如此,我可能会在 post 查询中添加一个类似计数器的注释。如果适合您,请在此处查看相关文档:
https://docs.djangoproject.com/en/3.1/ref/models/querysets/#django.db.models.query.QuerySet.annotate
但是,如果您确实需要点赞信息(例如,您要显示点赞的人的列表),那么like_set
是您的最佳选择。
【讨论】:
以上是关于如何在我的模板中显示喜欢和我的帖子?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 CBV 在我的所有 Django 模板中创建侧边栏?