繁体   English   中英

1个视图中有2个模型,Django中有1个模板?

[英]2 models in 1 view and 1 template in Django?

所以我有2个模型

class Post(models.Model):
    topic = models.CharField(max_length=200)
    description = models.TextField()
    created_by = models.ForeignKey(User, related_name='posts')
    created_on = models.DateTimeField()

    def __str__(self):
        return self.topic

class Comment(models.Model):
    commented_by = models.ForeignKey(User, related_name='comments')
    commented_on = models.ForeignKey(Post, related_name='comments')
    commented_text = models.CharField(max_length=500)
    commented_time = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.commented_text

我想在单个模板上显示帖子和评论。 所以,我创建了这个视图:

def post_desc(request, pk):
    post = get_object_or_404(Post, pk=pk)
    comment_list = Comment.objects.all()
    return render(request, 'post_desc.html', {'post': post, 'comment_list':comment_list})

并尝试在模板中显示它们:

{% if post.created_on %}
  {{ post.created_on }}
{% endif %}
<h1>{{ post.topic }}</h1>
<p>{{ post.description }}</p>

<h4>Comments</h4>
{% if comment_list.commented_on == post.topic %}
  {{ comment_list.commented_by }}{{ comment_list.commented_text }}
{% endif %}

但是它仅显示帖子,而不显示评论部分。 我在这里做错了什么?

您必须迭代评论。

{% for comment in comment_list %}
  <do your thing>
{% endfor %}

代码中有一个值得注意的问题。

无需将所有注释传递给模板。 仅传递属于该帖子的评论。

模板代码是错误的,因此视图,您的视图应如下所示:

def post_desc(request, pk):
    post = Post.objects.get(id=pk)
    return render(request, 'post_desc.html', {'post': post})

并且模板应该是

{% for comment in post.comments.all %}
<p>{{comment.text}}</p>
{% endfor %}

其中comment是从Post访问访问Comment对象的相关名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM