在呈现包含的模板之前访问 inclusion_tag 上下文变量

Access inclusion_tag context variables before included template is rendered

在我的模板中,我有一个包含上下文并从中读取/更新它的包含标记。作为一个包含标签,它也呈现一个模板本身。在 "parent" 模板(调用包含标记的模板)中,我想访问包含标记中设置的上下文变量之一,但我想在呈现包含标记的模板之前执行此操作。

是否有可能以某种方式做到这一点(也许使用 {% with %})?

具体来说,我正在使用 Django Mezzanine 并且正在修改 templates/generic/includes/comments.html for comments. Notice on line 10, the comment_thread 使用的标签。此标记加载给定对象的所有评论并将它们添加到上下文中。问题是,我想在 comments.html 模板中更早地访问那些评论,比如第 3 行(例如,我想通过 all_comments|length 显示评论的数量)。

所以理想情况下,我想要一种在 comments.html 早期调用 comment_thread 标记的方法,以便它可以更新上下文,但我想稍后在模板中显示其输出。

希望这很清楚,如果不清楚请告诉我。我不确定 Django 是否能够做我想做的事,我想我可能需要修改模板标签。我想我可以修改 comment_thread 标记以仅更新上下文,然后将 {% include %} 用于 comment_thread 当前呈现的模板。尽管如此,我还是不想修改 Mezzanine 本身,所以如果我的上述问题有解决方案,请告诉我!

如果您只想要评论数,那么您可以在 includes/comments.html 模板中这样做:

{{ object_for_comments.comments.visible.count }}

如果您想访问其他内容,那么您最好只编写一个简单的模板标签来提供您想要的内容。例如:

@register.assignment_tag(takes_context=True)
def comment_metadata(context, parent):
    comments_queryset = parent.comments.visible()
    # Perform whatever analysis you want on the comments, 
    # and return a variable that will be available in your template context.

您可能需要复制一些在 comment_thread 模板标签中执行的逻辑,但根据您需要的信息,这可能非常少。