我正在创建一个博客,其中需要一个评论部分(第一个项目,进入Python / Django 3周)。到目前为止,我已经创建了2个模型(Blog是主要的模型,Comment是与Blog的外键链接的模型),但是由于某种原因,我找不到合适的方法来将Comment模型中的信息显示到我的模型中HTML部分。
我尝试过使用字典,多次重写了模型和视图(由于发现了不同的youtube视频),但是似乎没有任何正常工作。
这些是我的模特:
class Blog(models.Model):
title = models.CharField('Blog\'s title', max_length=100, blank=False)
slug = models.SlugField('Enter your blog\'s url', blank=False)
date = models.DateTimeField('Date and time on publication',
blank=False)
content = models.TextField(blank=False)
thumb = models.ImageField(blank=True, null=True,
default='default_blog_icon.jpg')
def __str__(self):
return self.title
def snippet(self):
return self.content[:50] + ' ' +'...'
class Comment(models.Model):
post = models.ForeignKey(Blog, on_delete=models.CASCADE,
related_name='comments')
user = models.CharField(max_length=200)
body = models.TextField(max_length=200)
created = models.DateTimeField(auto_now_add=True)
approved = models.BooleanField(default=False)
def approved(self):
self.approved = True
self.save()
def __str__(self):
return self.user
意见:
def index(request):
blogs = Blog.objects.all().order_by('-date')
comments = Comment.objects.all()
args = {'blogs': blogs, 'comments': comments}
return render(request, "blog/index.html", args)
def blog_details(request, slug):
slug_url = Blog.objects.get(slug=slug)
return render(request, 'blog/blog_details.html', {'blog_info': slug_url})
还有HTML:
{% for blog in blogs %}
<div class="bloggy">
<h3><a href="{% url 'blog_details' slug=blog.slug %}">{{
blog.title }}</a></h3>
<img src ="/media/{{ blog.thumb }}">
<p>{{ blog.snippet }}</p>
<p>Posted on {{ blog.date }}</p>
<p>{{ comments }}</p>
<p>{{ Comments.Blog.get_user }}</p>
<p>{{ comment.user }}</p>
<p>{{ comment.created }}</p>
<p>{{ comment.approved }}</p>
</div>
{% endfor %}
到目前为止,我唯一能获得的前端就是{{ comments }}
,它为我提供了我设置的用户名。除此之外,什么都没有显示。
我需要以某种方式显示用户名,评论正文(内容本身)和日期。
任何帮助,反馈或指导将不胜感激。
欢呼
答案 0 :(得分:1)
您可以通过以下方式访问每个博客的评论:
在您的views.py中:
def index(request):
blogs = Blog.objects.all().prefetch_related('comments').order_by('-date')
args = {'blogs': blogs}
return render(request, "blog/index.html", args)
然后在模板中,您可以将HTML更改为此:
{% for blog in blogs %}
<div class="bloggy">
<h3><a href="{% url 'blog_details' slug=blog.slug %}">{{blog.title}}</a></h3>
<img src ="/media/{{ blog.thumb }}">
<p>{{ blog.snippet }}</p>
<p>Posted on {{ blog.date }}</p>
{% for comment in blog.comments.all %}
<p>{{ comment.blog.get_user }}</p>
<p>{{ comment.user }}</p>
<p>{{ comment.created }}</p>
<p>{{ comment.approved }}</p>
{% endfor %}
</div>
{% endfor %}