django模板 - 用于循环日期显示切片

时间:2014-03-18 02:36:12

标签: django date if-statement for-loop

我有一个django 1.4.6项目。我试图在我的模板中显示我未在过时的博客条目,所以我在我的models.py页面中拼凑了这些代码,该代码有效:

    #if the blog is post/future dated, do not display the blog entry.
    @property
    def is_past_date_published_blog(self):
        if self.blog_post_date_published < date.today():
            return True
        return False

现在我想显示前3个博客条目(我有超过10个博客条目),所以我使用了一个切片:3如下所示:

            {% for blog_post in blog_posts|slice:":3" %}
                {% if blog_post.is_past_date_published_blog %}
                    .......
                    .......
                 {% endif %}
            {% endfor %}

但是,这只会显示两个条目,因为循环会计算内部if条件未包含的博客条目。我试图将for循环放在if语句中,但这不起作用。我现在很难过。

如何编写此代码以显示今天之前的三个博客条目?

2 个答案:

答案 0 :(得分:3)

Don't put too much logic in the template

  

目标不是发明一种编程语言。目标是提供   足够的编程式功能,例如分支和   循环,这对于做出与演示相关的决定至关重要。

您所描述的任务根本不是与演示相关的。

过滤掉视图中未来日期的博客条目,并将其传递给模板。 E.g:

blog_posts = BlogPost.objects.filter(blog_post_date_published__lt=datetime.today())[:3]

然后,在模板中,只需循环浏览您之前已过滤过的博文:

{% for blog_post in blog_posts %}
    # display a blog post
{% endfor %}

希望有所帮助。

答案 1 :(得分:0)

您可以从您的视图中传递,只显示今天之前发布的博客帖子,然后使用|slice:":3",而不是现在只显示三个。操作视图中的数据比模板

更容易

另一种方法是在模板中有一个计数器变量,它在内部if条件中递增,但不鼓励在模板中进行任何数据更改。