django博客 - 回复后系统显示回复

时间:2010-06-01 13:08:21

标签: django templates object view

我有一个迷你博客应用程序和一个回复系统。我想列出所有迷你博客条目,以及他们的回复,如果有的话。 我有views.py

def profile_view(request, id):
        u = UserProfile.objects.get(pk=id)
        paginator = New.objects.filter(created_by = request.user) 
        replies = Reply.objects.filter(reply_to = paginator)
    return render_to_response('profile/publicProfile.html', {
        'object_list': u,
        'list':paginator,
        'replies':replies
        }, 
        context_instance=RequestContext(request)) 

并在模板中:

<h3>Recent Entries:</h3>
     {% for object in list %}
<li>{{ object.post }} <br />
{% for object in replies %}
{{ object.reply }} <br />
{% endfor %}

提及:reply_to是一个ForeignKey到New,New是'迷你博客'表的名称

但它只显示每个博客条目的所有回复,而不是每个条目的回复(如果有的话)

感谢

1 个答案:

答案 0 :(得分:3)

首先,请考虑为变量提供合理的名称。 Newlistpaginator根本没有描述这些对象究竟是什么 - 在某些情况下,它们会产生误导,就像object_list一样,它不是列表除了单个项目之外的所有项目。

其次,代码完全符合您的要求(忽略您发布的模板代码实际上无效的事实,因为您没有正确嵌套循环并重新定义object变量)。您将获得所有条目,所有回复,然后显示每个条目下的所有回复列表。

相反,您显然希望将回复附加到每个条目。因此,请在视图中删除引用Reply的行,并在模板中使用reverse relationship

{% for object in list %}
  {{ object.post }}
  {% for reply in object.reply_set.all %}
    {{ reply }}
  {% endfor %}
{% endfor %}

最后,正如其他人在回答您的其他问题时所建议的那样,您可以通过阅读Django教程和Django书籍获得良好的服务,这两本书都可以在线免费获得。