我有一个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语句中,但这不起作用。我现在很难过。
如何编写此代码以显示今天之前的三个博客条目?
答案 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条件中递增,但不鼓励在模板中进行任何数据更改。