如何在渲染时将 js/css 附加到 StreamField 块?

cor*_*ror 3 wagtail

我知道您可以使用 django forms Media API 和方法在表单js_initializer()中包含 javascript ,并且我已经成功完成了。但是,当显示我编写的这个自定义块的实例时,我需要在页面中包含 javascript 和 CSS 文件。

有具体的机制吗?或者我只需要在页面模板中包含 js/css 文件?我真的很想避免将它们包含在每个具有可能具有此块的 StreamField 的页面上,因为绝大多数不会,这意味着浪费大量页面加载时间。

gas*_*man 5

这之前曾在https://github.com/wagtail/wagtail/issues/2490讨论过- 我还没有尝试过,但我相信您可以通过在返回django.formsfrontend_media的相关块类上定义一个属性来实现这一点.Media对象,以及一个将这些媒体定义收集到单个对象中的函数(页面模型上的方法可能很合适......):

from django.forms import Media

class MyPage(Page):
    body = StreamField(...)

    def body_media(self):
        media = Media()
        for block_val in self.body:
            if hasattr(block_val.block, 'frontend_media'):
                media += block_val.block.frontend_media
        return media
Run Code Online (Sandbox Code Playgroud)