在Django模板中渲染外部定义的块

时间:2010-11-11 08:56:00

标签: python django django-templates

我正在为Django编写一个类似于博客的简单应用程序,并试图让首页的帖子限制为5个,并提供一个综合档案,一次列出100个帖子。 (100是不现实的,只是扔了一个数字)

由于博客文章块在两个页面之间看起来完全相同而不是显示的数字,我想将相应的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 %}

3 个答案:

答案 0 :(得分:2)

您正在寻找inclusion tag

答案 1 :(得分:0)

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

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

您可以在视图中定义博客帖子,其中包含5个或100个帖子。

答案 2 :(得分:0)

Ignacio是正确的,你想要一个包含标签,但你应该知道include标签在当前上下文之外做呈现 - 它肯定使用与块相同的上下文它在。

您的问题可能是您尝试在blogpost_set上调用object_list - 但该关系不是对象列表,而是列表中的每个单独对象。您需要遍历object_list,然后遍历每个blogpost_set.all