在我的模板中,我有一个包含标记,它接受上下文并从中读取/更新它。作为包含标记,它还会呈现模板本身。在“父”模板(调用包含标记的模板)中,我想访问包含标记中设置的上下文变量之一,但我想在呈现包含标记的模板之前执行此操作。
是否有可能以某种方式执行此操作(可能使用{% with %}
)?
具体来说,我正在使用Django Mezzanine而我正在修改templates/generic/includes/comments.html以征求意见。请注意line 10,comment_thread
标记。此标记加载给定对象的所有注释,并将它们添加到上下文中。问题是,我想先在comments.html
模板中访问这些评论,比如第3行(例如,我想通过all_comments|length
显示评论数量)。
理想情况下,我希望能够在comment_thread
的早期调用comments.html
标记,以便更新上下文,但我希望稍后在模板中显示其输出。
希望这很清楚,如果不是,请告诉我。我不确定Django是否能够做我想做的事情,我可能需要修改模板标签。我想我可以修改comment_thread
标记以仅更新上下文,然后对comment_thread
当前呈现的模板使用{%include%}。不过,我宁愿不必修改Mezzanine本身,所以如果我的问题有解决方法,请告诉我!
答案 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
模板标签中正在执行的某些逻辑,但根据您需要的信息,这可能非常小。