【问题标题】:How to attach js/css to a StreamField block when it is rendered?渲染时如何将 js/css 附加到 StreamField 块?
【发布时间】:2017-10-04 18:19:26
【问题描述】:

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

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

【问题讨论】:

    标签: wagtail


    【解决方案1】:

    这在https://github.com/wagtail/wagtail/issues/2490 之前已讨论过——我还没有尝试过,但我相信您可以通过在返回django.forms.Media 对象的相关块类上定义一个frontend_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
    

    【讨论】:

    • 哦,太棒了,这正是我想要的!顺便说一句,你链接的那个问题提醒我,我的商店真的应该使用 {% compress %} 块而不是可选的 CSS/JS。我需要研究如何适当地做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多