Django - 如何使用 _set.all 设置 for 循环?

Django -How do I set up a for loop using _set.all?

我正在尝试弄清楚如何设置 for 循环;但是,我不确定如何正确设置它。如何正确设置 for 循环以显示数据库中的所有存储值?

现在在我的模板中,我的设置如下:

{% if comments %}
    {% for comments in post.comments_set.all %}
        {{ comments }}
    {% endfor %}
{% endif %}

{{评论}}没有价值return;但是,当 {{ comments }} 放在循环之外时,它 return 是第一条评论。

这是我的views.py:

class PostList(generic.ListView):
    template_name = 'articles/index.html'
    context_object_name = "news_posts"
    paginate_by = 5

    def get_queryset(self):
        return newspost.objects.order_by('-post_date')[:5]

class PostComments(generic.DetailView):
    model = newspost
    context_object_name = "comments"
    template_name = 'articles/comments.html'

models.py:

def get_upload_file_name(instance, filename):
    return "img/%s_%s" % (str(time()).replace('.','_'), filename)

class newspost(models.Model):
    post_title = models.CharField(max_length=30)
    post_image = models.FileField(upload_to=get_upload_file_name, null=True)
    post_date = models.DateTimeField('Date Published')
    post_short_description = models.TextField(max_length=300)
    post_text = models.TextField()
    def __str__(self):
            return self.post

class PostComments(models.Model):
    post = models.ForeignKey(newspost)
    comments_count = models.IntegerField(default=0)
    comments_text = models.TextField(max_length=200, blank=True)
    def __str__(self):
            return self.comment_text

urls.py

urlpatterns = patterns('',

    url(r'^$', views.PostList.as_view(), name='index'),
    url(r'^(?P<pk>\d+)/$', views.PostDetail.as_view(), name='post'),
    url(r'^comments/(?P<pk>\d+)/$', views.PostComments.as_view(), name='comments'),
    url(r'^editors_request_form/$', views.EditorsRequestForm, name='editors')
)

我似乎找不到设置 for 循环的正确方法,我尝试了很多方法,但似乎没有任何效果。那么我如何设置我的 for 循环以 return 我所有的 {{ comments }}?

保存模板中 Post 对象的变量名称是 object。 此外,在为变量赋值之前,您无法测试 comments 变量是否存在。

您想做的是:

{% for comments in object.comments_set.all %}
    {{ comments }}
{% endfor %}

如果没有评论,则不会呈现任何内容,因为循环将为空。您可以使用 empty clause 来处理没有评论的情况。示例:

{% for comments in object.comments_set.all %}
    {{ comments }}
{% empty %}
    The post has no comments.
{% endfor %}