django - Django,如何仅在登录用户的帖子模板中显示博客帖子的评论
问题描述
Django,如何仅在登录用户的帖子模板中显示博客帖子的评论,我制作了下面提到的模型和视图。现在我的评论已成功存储在用户名的数据库中,但问题是它没有显示在帖子中。到目前为止,仅显示计数以查看到目前为止发布了多少评论!
def get_comments(self):
return self.comments.all().order_by('-timestamp')
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
commentfield = models.TextField()
post = models.ForeignKey(Blogpost, related_name='comments', on_delete=models.CASCADE)
def __str__(self):
return self.user.username
**My Forms**
from django import forms
from .models import Blogpost, Comment
class CommentForm(forms.ModelForm):
commentfield = forms.CharField(widget=forms.Textarea(attrs={
'class': 'form-control',
'placeholder': 'Type your comment',
'id': 'usercomment',
'rows': '4'
}))
class Meta:
model = Comment
fields = ("commentfield",)
**My Blog Post Views**
def blogpost(request, year, month, day, post):
category_count= get_category_count()
latest = Blogpost.objects.order_by('-publish')[0:4]
post = get_object_or_404(Blogpost, slug= post)
form = CommentForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
form.instance.user = request.user
form.instance.post = post
form.save()
return redirect('.')
context = {'post':post,
'latest': latest,
'category_count': category_count,
'form': form,
}
return render(request, 'blog/blogpost.html', context)
**My Templates**
<div class="post-comments">
<header>
<h3 class="h6">Post Comments<span class="no-of-comments">
({{ post.comments.count }})</span></h3>
</header>
{% for comment in post.get_comments %}
<div class="comment">
<div class="comment-header d-flex justify-content-between">
<div class="user d-flex align-items-center">
<div class="image">
{% if comment.user.author %}
<img src="{{ comment.user.author.profile_picture.url }}" alt="..."
class="img-fluid rounded-circle">
{% else %}
<img src="" alt="..."
class="img-fluid rounded-circle">
{% endif %}
</div>
<div class="title"><strong>{{ comment.user.username }}</strong><span
class="date">{{ comment.timestamp|timesince }} ago</span></div>
</div>
</div>```
解决方案
在您blogpost
看来,尝试手动获取注释并在上下文中传递它们,而不是在模板中调用类方法。模板的目的是展示业务逻辑,而不是编写或定义它。
def blogpost(request, year, month, day, post):
category_count= get_category_count()
latest = Blogpost.objects.order_by('-publish')[0:4]
post = get_object_or_404(Blogpost, slug=post)
comments = post.comments.all() # here
form = CommentForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
form.instance.user = request.user
form.instance.post = post
form.save()
return redirect('.')
context = {'post':post,
'latest': latest,
'category_count': category_count,
'form': form,
'comments': comments
}
return render(request, 'blog/blogpost.html', context)
然后在您的模板中使用:
{% for comment in comments %}
{{ comment }}
{% endfor %}
推荐阅读
- sql-server - 将个人姓名分成不同的列
- ios - 设置角半径时 UIView 框架略有不同
- html - 如何在 IE 中隐藏输入类型单选并收集值?
- css - 如何让我的模态覆盖整个屏幕?
- python - 如何了解 jupyter notebook 单元中输出的(位)大小?
- dotnetnuke - 对使用 DNN 分类术语列表的所有应用程序使用整个站点的一个 2sxc 应用程序的类别/标签?
- html - 2个单词之间的空格
- sql - 我如何查询每个不认识上课的人的人?
- c++ - 使用 FFMPEG LibAV 重新采样音频
- javascript - 如何在自定义纸张大小上使用 css 打印 html 页面的特定 div