从 StreamField 内的块内访问当前页面

Access current page from inside a block, inside a StreamField

在一个块内,能够访问调用页面(即它的上下文)以便能够将过滤器范围应用于我想在我的块中显示的任何数据集合是有意义的。

这是我的块模板:

<div class="fooblock__items">
  {% foo_tag calling_page=??? %}
</div>

如您所见,我想将调用页面发送到名为 foo_tag 的自定义标记,这样我就可以在我的标记逻辑中使用调用页面标识符:

@register.inclusion_tag('home/tags/foo.html', takes_context=True)
def foo_tag(context, calling_page=None):
  return {'foos': Foo.objects.filter(some_arg=calling_page.id)}

在我的块模板中,如何访问调用页面模型?

使用当前通过 {{ ... }} 标记呈现块的方法是不可能的,因为 Django 不会在此时传递上下文。 (本质上,您正在呈现块的固定 HTML 表示,它对调用页面一无所知。)当前唯一的解决方法是避免对需要访问外部上下文的任何内容使用块模板,而只是循环外部模板中的流值。

正在提议引入 {% include_block %} 模板标签,以解决此问题:https://github.com/torchbox/wagtail/issues/1743