Здравствуйте нужна помощь в отображении комментариев к каждому посту на главной странице
может ли кто-нибудь помочь мне, пожалуйста. я хочу отображать количество комментариев на главной странице блога, где отображаются все посты. я хочу отображать количество комментариев на главной странице блога. комментариев на главной странице блога, где отображаются все посты. Я хочу, чтобы отображать количество комментариев на маленькой иконке комментария под каждым постом, есть. есть. спасибо
.моя модель:
class BlogPost(models.Model):
sno = models.AutoField(primary_key=True)
title = models.CharField(max_length=60, null=False, blank=False)
body = models.TextField(max_length=5000, null=False, blank=False)
image = models.ImageField(upload_to=upload_location, null=False, blank=True)
date_published = models.DateTimeField(auto_now_add=True, verbose_name="date_published")
date_updated = models.DateTimeField(auto_now=True, verbose_name="date_updated")
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
category = models.CharField(max_length=20, choices=CATEGORIES_NAME, default='Entertainment')
slug = models.SlugField(blank=True, unique=True)
def __str__(self):
return self.title
class BlogComment(models.Model):
sno = models.AutoField(primary_key=True)
comment = models.TextField()
user = models.ForeignKey(Account, on_delete=models.CASCADE)
post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
timestamp = models.DateTimeField(default=now)
def __str__(self):
return str(self.sno)
просмотр моей домашней страницы:
BLOG_POSTS_PER_PAGE = 4
def home_screen_view(request):
context = {}
query = ""
if request.GET:
query = request.GET.get('q', '')
context['query'] = str(query)
blog_posts = sorted(get_blog_queryset(query), key=attrgetter('date_updated'), reverse=True)
comments = BlogComment.objects.all()
# Pagination
page = request.GET.get('page', 1)
blog_posts_paginator = Paginator(blog_posts, BLOG_POSTS_PER_PAGE)
try:
blog_posts =blog_posts_paginator.page(page)
except PageNotAnInteger:
blog_posts =blog_posts_paginator.page(BLOG_POSTS_PER_PAGE)
except EmptyPage:
blog_posts =blog_posts_paginator.page(blog_posts_paginator.num_pages)
context['blog_posts'] = blog_posts
context['comments'] = comments
return render(request, "personal/home.html", context)
this is personal/home.html
<!-- Blog posts-->
{% if blog_posts %}
{% for post in blog_posts %}
<div class="blog-post-container">
{% include 'blog/snippets/blog_post_snippet.html' with blog_post=post %}
</div>
{% endfor %}
{% else %}
<div class="blog-post-container">
{% include 'blog/snippets/blog_post_snippet.html' with query=query %}
</div>
{% endif %}
<!-- End Blog posts-->
<!-- Pagination -->
{% include 'blog/snippets/blog_post_pagination.html' with blog_posts=blog_posts %}
this is blog_post_snippet.html
where the loop is running
{% include 'blog/snippets/modal.html' %}
{% if blog_post %}
<div class="container">
<div class="row">
<!-- Blog Post -->
<div class="card m-auto">
{% if blog_post.image %}
<a href="{% url 'blog:detail' blog_post.slug %}">
<img class="p-0 m-0 card-img-top" src="{{blog_post.image.url}}">
</a>
{% endif %}
<div class="row">
<div class="card-body col-lg d-lg-block d-none mt-2 mb-2">
<span class="badge bg-secondary">{{ blog_post.category }}</span>
<a href="{% url 'blog:detail' blog_post.slug %}" class="text-decoration-none">
<h2 class="card-title post-heading mt-3">{{blog_post.title}}</h2>
</a>
{% if blog_post.body|length >= 100 %}
<p class="card-text body-text-small post-body" id="bodyText">{{blog_post.body}}</p>
<a class="btn btn-outline-success btn-sm read-more" id="readMore">Read More</a>
<a class="btn btn-outline-success btn-sm read-less" id="readLess">Read Less</a>
{% else %}
<p class="card-text post-body" id="bodyText">{{blog_post.body}}</p>
{% endif %}
{% if blog_post.author == request.user %}
<a href="{% url 'blog:edit' blog_post.slug %}" class="btn btn-outline-primary btn-sm"><i
class="fas fa-edit"></i> Update</a>
<a href="#" data-toggle="modal" data-target="#smallModal" class="btn btn-outline-danger btn-sm"><i class="far fa-trash-alt"></i> Delete</a>
{% endif %}
here is the problem. im getting all the comments displayed here related to the post. but when im trying to enter {{ comment.comment.count}} its throwing this error "no signature found for builtin <built-in method count of str object at 0x00000135AE4CFF70>".
{% for comment in comments %}
{% if comment.post == blog_post%}
{{ comment.comment }}
{% endif %}
{% endfor %}
<a href="{% url 'blog:detail' blog_post.slug %}" class="btn btn-outline-secondary btn-sm"><i class="far fa-comment"></i></a>
</div>
<div class="card-body d-lg-none mt-2 mb-2">
<span class="badge bg-secondary">{{ blog_post.category }}</span>
<a href="{% url 'blog:detail' blog_post.slug %}" class="text-decoration-none">
<h2 class="card-title post-heading mt-3">{{blog_post.title}}</h2>
</a>
{% if blog_post.body|length >= 120 %}
<p class="card-text body-text-small post-body" id="bodyText">{{blog_post.body}}</p>
<a class="btn btn-outline-success btn-sm read-more" id="readMore"><i class="fas fa-chevron-circle-down"></i></a>
<a class="btn btn-outline-success btn-sm read-less" id="readLess"><i class="fas fa-chevron-circle-up"></i></a>
{% else %}
<p class="card-text post-body" id="bodyText">{{blog_post.body}}</p>
{% endif %}
{% if user.is_superuser %}
<a href="{% url 'blog:edit' blog_post.slug %}" class="btn btn-outline-primary btn-sm"><i class="fas fa-edit"></i></a>
<a href="#" data-toggle="modal" data-target="#smallModal" class="btn btn-outline-danger btn-sm"><i class="far fa-trash-alt"></i></a>
{% endif %}
<a href="{% url 'blog:detail' blog_post.slug %}" class="btn btn-outline-secondary btn-sm"><i class="far fa-comment"></i></a>
</a>
</div>
</div>
<div class="card-footer text-muted post-info">
<small class="text-secondary">Updated on {{blog_post.date_updated}}</small>
</div>
</div>
</div>
</div>
{% else %}
<div class="container">
<div class="row">
<div class="card m-auto">
<div class="card-body mt-2 mb-2">
<h2 class="card-title">No results</h2>
<p class="card-text">There were no results matching the Query: <strong>{{query}}</strong></p>
</div>
</div>
</div>
</div>
{% endif %}
here is the view.py
from django.shortcuts import render
from django.db.models import Count
from operator import attrgetter
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from account.models import Account
from blog.views import get_blog_queryset
from blog.models import BlogComment, BlogPost
BLOG_POSTS_PER_PAGE = 4
def home_screen_view(request):
context = {}
query = ""
if request.GET:
query = request.GET.get('q', '')
context['query'] = str(query)
# context['success_message'] = f'Search results for query "{query}"'
blog_posts = sorted(get_blog_queryset(query), key=attrgetter('date_updated'), reverse=True)
comments = BlogComment.objects.annotate(number_of_comments=Count('comment'))
# Pagination
page = request.GET.get('page', 1)
blog_posts_paginator = Paginator(blog_posts, BLOG_POSTS_PER_PAGE)
try:
blog_posts =blog_posts_paginator.page(page)
except PageNotAnInteger:
blog_posts =blog_posts_paginator.page(BLOG_POSTS_PER_PAGE)
except EmptyPage:
blog_posts =blog_posts_paginator.page(blog_posts_paginator.num_pages)
context['blog_posts'] = blog_posts
context['comments'] = comments
return render(request, "personal/home.html", context)
it will be great if somehow i can count the number of comments on a post here instead of getting comments itself. it will great help. im trying from longtime but still can not get it done. please help. thanks