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

时间:2017-10-04 18:19:27

标签: wagtail

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

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

1 个答案:

答案 0 :(得分:3)

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

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