在一个简单视图中,我在模板中传递一个族,如下所示:
def page(request):
family= Author.objects.all()
return render(request, "myapp/page.html", {'family':family})
我在模板中呈现如下:
{% for item in family %}
{{ item.pk }}
{% endfor %}
但是,如果我把我的家庭放在一个循环中;例如:
def page(request):
family = []
for i in range(5):
family= Author.objects.filter(name='John')[i]
return render(request, "myapp/page.html", {'family':family})
它不会在模板中呈现任何内容
有什么想法吗
编辑1
我的应用程序中有更多的用户,每个用户都有不同的博客,每个博客都有不同的帖子。。。 所以当用户登录时,我需要显示他的博客,每个博客显示最后5篇文章。 我有:
@login_required
def page(request):
user = request.user.id
numblog = Blog.objects.filter(user_id=user).aggregate(c=Count('id'))
for i in range(numblog['c']):
blogquery = Blog.objects.filter(user_id=user)[i]
postquery = Post.objects.filter(blog_id=blogquery.pk)[:5]
return render(request, "myapp/page.html", {'blogquery ':blogquery,'postquery ':postquery })
模板中的预期结果:
{% for b in blogquery %}
{{ b.name }} ### here name of blog
{% for p in postquery %}
{% if p.blog_id == b.pk %}
{{ p.content }} ### here last 5 post of THAT blog
{% endif %}
{% endfor %}
{% endfor %}
编辑2
在视图中,如果我打印结果,它会工作,但不会在模板中渲染
@login_required
def page(request):
user = request.user.id
numblog = Blog.objects.filter(user_id=user).aggregate(c=Count('id'))
for i in range(numblog['c']):
blogquery = Blog.objects.filter(user_id=user)[i]
postquery = Post.objects.filter(blog_id=blogquery.pk)[:5]
for p in postquery:
print (blogquery.pk, p.pk)
return render(request, "myapp/page.html", {'blogquery ':blogquery,'postquery ':postquery })
令人惊讶的是,你怎么不明白在一个循环中重复赋值给同一个变量只会得到last值
但无论如何,您不需要这些代码。您应该只遵循模板中的关系
(你还没有展示你的模型,所以我假设博客和帖子之间的相关名称叫做
post_set
,根据需要进行更改更新
那是不对的。您不需要使用for循环。如果您需要获取最后5行,您可以这样做,即:
另一种方法是限制模板中的结果:
相关问题 更多 >
编程相关推荐