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

时间:2015-11-21 04:29:38

标签: python django django-templates mezzanine django-template-filters

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

是否有可能以某种方式执行此操作(可能使用{% with %})?

具体来说,我正在使用Django Mezzanine而我正在修改templates/generic/includes/comments.html以征求意见。请注意line 10comment_thread标记。此标记加载给定对象的所有注释,并将它们添加到上下文中。问题是,我想先在comments.html模板中访问这些评论,比如第3行(例如,我想通过all_comments|length显示评论数量)。

理想情况下,我希望能够在comment_thread的早期调用comments.html标记,以便更新上下文,但我希望稍后在模板中显示其输出。

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

1 个答案:

答案 0 :(得分:1)

如果您只想要评论计数,那么您可以在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模板标签中正在执行的某些逻辑,但根据您需要的信息,这可能非常小。