python - Django在模板中传递家庭循环
问题描述
在一个简单的视图中,我在模板中传递了一个家庭,如下所示:
def page(request):
family= Author.objects.all()
return render(request, "myapp/page.html", {'family':family})
我在这样的模板中渲染:
{% for item in family %}
{{ item.pk }}
{% endfor %}
但是,如果我把我的家人放在一个 for 循环中;例如:
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 })
解决方案
令人惊讶的是,您不明白在循环中重复分配给同一个变量只会给您最后一个值。
但是,您不需要任何此代码。您应该只遵循模板中的关系。
@login_required
def page(request):
blogs = Blog.objects.filter(user=user).prefetch_related('post_set')
return render(request, "myapp/page.html", {'blogs ': blogs })
{% for blog in blogs %}
{{ blog.name }}
{% for post in blog.post_set.all|slice:"5" %}
{{ post.content }}
{% endfor %}
{% endfor %}
(你没有展示你的模型,所以我假设从 Blog 到 Post 的 related_name 被称为post_set
,根据需要进行更改。
推荐阅读
- ios - 如果我打开了位置服务,那么我的应用程序在进入后台模式时如何被杀死?
- c - 我如何找到 igraph 的 shortest_paths 的底层 C 代码?
- c - c中变量机制的范围
- android - 依赖项是最新的,但 Gradle 认为不是
- angular6 - FormArray 得到 ExpressionChangedAfterItHasBeenCheckedError
- javascript - 当我添加用于在日历中显示事件的脚本时,事件在 fullcalendar 上不起作用
- javascript - Firebase 数据库同步调用问题
- wordpress - Wordpress 管理栏上的图标上的正方形
- java - 从第三方网络应用程序中识别 Google 用户
- php - 在 PHP 中从复杂的 XML 输出创建和回显数组