【问题标题】:How to get a certain number of elements in django template如何在django模板中获取一定数量的元素
【发布时间】:2018-07-16 17:51:55
【问题描述】:

我想知道当我将 if 语句放入 for 循环中时如何获得特定数量的项目

我知道我们可以通过{% for i in items|slice ":5"%} 获得一些物品,但是当我这样做时

{% for post in posts %}
    {% for img in post_imgs %}
        {% if img.link == post.link %}
            <img class="class" src="{{img.img.url}}" style="width:100%">
        {% endif %}
    {% endfor %}
{% endfor %}

在 if 标记内没有办法做到这一点.. 任何解决方案

【问题讨论】:

  • 这在视图中会更好。将业务逻辑保留在模板之外是一种很好的做法。

标签: django templates for-loop if-statement


【解决方案1】:

来自this answer

不鼓励在 Django 模板中更改对象的状态。 您可能应该咬紧牙关,计算条件 事先并将额外的状态传递给模板,以便您可以简化 模板逻辑。

所以只需在你的视图中用 python 进行比较,比如:

post_imgs_filtered = [img for img in post_imgs if img.link == post.link]

然后在你的模板中:

{% for img in post_imgs_filtered|slice ":5" %}
    <img class="class" src="{{img.img.url}}" style="width:100%">
{% endfor %}

【讨论】:

  • 当我这样做时,我收到一条错误消息AttributeError at /test 'QuerySet' object has no attribute 'link'
  • 我在问题中添加了一个 for 循环,但我一开始忘记输入了
  • 是的,你需要在访问它的元素之前遍历你的 QuerySet。这是一个不同的 python 问题。
  • 如何将其添加到 post_img_filtered 中?
  • 这取决于你的数据结构,如果postspost_imgs 是查询集,你可以使用过滤器。
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多