我知道您可以使用django表单Media API和js_initializer()
方法在表单中包含javascript,并且我已经成功完成了。但是当我编写的这个自定义块的实例显示 时,我需要在页面中包含一个javascript和CSS文件。
是否有特定的机制?或者我只需要在页面模板中包含js / css文件?我真的很想避免将它们包含在每个具有可能可能这个块的StreamField的页面上,因为绝大多数都不会,这意味着浪费了很多页面加载时间。
答案 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