如何在呈现时将 js/css 附加到 StreamField 块?
How to attach js/css to a StreamField block when it is rendered?
我知道您可以使用 django forms Media API 和 js_initializer()
方法将 javascript 包含在 form 中,并且我这样做很成功。但是我需要在页面中包含一个 javascript 和 CSS 文件,当我编写的这个自定义块的一个实例被 显示 .
有具体的机制吗?还是我只需要在页面模板中包含 js/css 文件?我真的很想避免将它们包含在每个具有 可能 具有此块的 StreamField 的页面上,因为绝大多数不会,这意味着大量浪费的页面加载时间.
这之前在 https://github.com/wagtail/wagtail/issues/2490 - I haven't tried it, but I believe you could implement this by defining a frontend_media
property on the relevant block classes that returns a django.forms.Media object 中讨论过,还有一个函数(页面模型上的一个方法可能很合适......)将这些媒体定义收集到一个对象中:
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
我知道您可以使用 django forms Media API 和 js_initializer()
方法将 javascript 包含在 form 中,并且我这样做很成功。但是我需要在页面中包含一个 javascript 和 CSS 文件,当我编写的这个自定义块的一个实例被 显示 .
有具体的机制吗?还是我只需要在页面模板中包含 js/css 文件?我真的很想避免将它们包含在每个具有 可能 具有此块的 StreamField 的页面上,因为绝大多数不会,这意味着大量浪费的页面加载时间.
这之前在 https://github.com/wagtail/wagtail/issues/2490 - I haven't tried it, but I believe you could implement this by defining a frontend_media
property on the relevant block classes that returns a django.forms.Media object 中讨论过,还有一个函数(页面模型上的一个方法可能很合适......)将这些媒体定义收集到一个对象中:
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