2010-11-11 62 views
1

我正在为Django编写一个简单的类似博客的应用程序,并且试图获得将帖子限制为5的首页的效果,并且具有列出类似100个帖子的全面存档一次。 (100是不现实的,只是抛出一个数字)在Django模板中渲染外部定义的块

由于博客帖子块看起来两个页面之间完全相同减去显示的数字,我想把相应的HTML放在一个单独的模板我可以包含或链接到正在渲染的实际模板。我查看了文档,include标签看起来很有希望,但它显然呈现在当前上下文之外,这对我的原因没有帮助,因为它不会让对象循环播放。除此之外,我看不到任何其他方式去做我想做的事。这是可能的还是我只是运气不好,并将不得不违反DRY?代码如下,让你知道我想要什么。

感谢

####################### 
# news/frontpage.html # 
####################### 
{% extends "news/base.html" %} 

{% block site_title %} - Front Page{% endblock %} 

{% block center_col %} 
{{ block.super }} 
    <a href="/news/">View Older Blog Posts</a> 
{% endblock %} 

{% block blog_rows %} 
{% for object in object_list %} 
    # Blog post content would go here, however it is to be included. 
{% endfor %} 
{% endblock %} 

回答

2

你正在寻找一个inclusion tag

+0

看起来像我想要的,但我希望有一个更优雅的方式来做到这一点......谢谢! – SPoage 2010-11-11 09:07:53

0

为什么不过滤想要在视图中显示的博客文章?这样,你可以保持模板相同:

{% for object in blogposts %} 
# ... 
{% endfor %} 

你在你看来,这无论是包括5名或100个职位定义的相关博客文章。

0

伊格纳西奥是正确的,你想要一个包含标签,但你应该知道,include标签不呈现当前环境之外 - 这十分肯定地使用相同的情况下,因为它是在块

你问题可能是您正尝试拨打object_list上的blogpost_set - 但这种关系与列表中的对象不同,它与列表中的每个单独对象都有关系。你需要遍历每一个object_list,然后通过blogpost_set.all

+0

这是一个错字,我实际上已经修复了它,但是会调用{%include%}来做我想要的,或者我还想要编写一个包含标记吗? – SPoage 2010-11-11 09:09:39