【问题标题】:Render Externally Defined Block In Django Template在 Django 模板中渲染外部定义的块
【发布时间】:2011-05-08 08:27:09
【问题描述】:

我正在为 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 %}

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    您正在寻找inclusion tag

    【讨论】:

    • 这看起来像我想要的,虽然我希望有一种更优雅的方式来做到这一点......谢谢!
    【解决方案2】:

    您为什么不过滤出您想在视图中显示的博客文章?这样您就可以保持模板不变:

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

    您在视图中定义博文,其中包括 5 或 100 篇博文。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这是一个错字,我实际上已经修复了它,但是调用 {% include %} 会做我想做的事情还是我仍然想编写一个包含标签?
      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 2013-08-02
      • 1970-01-01
      相关资源
      最近更新 更多