【问题标题】:Django loop through a list of objects in templateDjango 循环遍历模板中的对象列表
【发布时间】:2012-12-25 08:02:59
【问题描述】:

我正在尝试将查询的结果存储在列表或类似列表中(尝试不同的替代方案),但我得到最远的一个是:

def index(request):
for post in blog_posts:
        comments_total.setdefault(post.id, []).append(comments.total(post.id))
return render_to_response('blog/index.html', {
'comments': comments_total})

在我得到的返回数据中: {5L:[2],6L:[1]}

我正在使用此代码访问:

{% if comments %}
{{comments}}<br />
{% for cid in comments %}
{% if cid == post.id %}
{{cid}} - {{comments.cid.0}}<br />
{{cid}} - {{comments.6.0}}
{% endif %}
{% endfor %}
{% endif %}

整体打印出来的是:

{5L: [2], 6L: [1]} 5 - 5 - 1

对于如何获取所有 cmets(在这种情况下为博客),是否有替代方法计算每个帖子的结果并将其返回到模板?

我正在尝试为博客的起始页获取计数器。 “你在这个帖子上有 (X) 个 cmets”——诸如此类。

【问题讨论】:

  • 您是否在评论系统中使用任何特定模块?其中一些(如 Disqus)内置了用于返回此类信息的函数。
  • 没有额外的模块。我唯一拥有的模块是我为 cmets 和帖子定制的,相当简单的“将其整齐地加载到数据库中”。

标签: django list templates object loops


【解决方案1】:

您可以通过更有效的方式“显示每个帖子的 cmets 计数”

假设您有两个模型 PostComment。只需在Comment 模型中为帖子ForeignKey 定义一个related_name 关系:

class Comment(models.Model):
    post = models.ForeignKey(Post, related_name='comments')
    # other fields

然后在模板中你可以这样做:

{% for post in posts %}
    {{post.comments.count}}
{% endfor %}

【讨论】:

  • 我确实尝试过,但没有成功。给我一个“UnboundLocalError”,因为在分配之前引用了“cmets”。 related_name 是从模型中可能存在的任何变量中获取的,还是突然出现的?
  • 错误来自模型吗?如果是,您可能错过了单引号,它应该是related_name='comments'。没有related_name 不是取自任何变量,它只是直接在那里定义为一个字符串
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2010-10-22
  • 1970-01-01
相关资源
最近更新 更多