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 %}
我正在尝试弄清楚如何设置 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 %}