【问题标题】:Writing custom filter in flask-assets (webassets)在烧瓶资产(网络资产)中编写自定义过滤器
【发布时间】:2019-07-26 22:47:01
【问题描述】:

将 Flask 与 flask-assets 一起使用(来自 webassets)我为 css 压缩器编写了自己的自定义过滤器 following the documentation。它似乎不起作用:

from csscompressor import compress
from flask_assets import Bundle
from webassets.filter import Filter, register_filter

class NoopFilter(Filter):
    name = 'csscompressor'
    print("noopfilter")

    def output(self, _in, out, **kwargs):
        print("output")

    def input(self, _in, out, **kwargs):
        print("input")

register_filter(NoopFilter)

bundles = {
    'home_css': Bundle(
        'css/main.css',
        'css/forms.css',
        output='gen/home.css',
        filters='csscompressor'
    )

该类在启动时被调用两次,过滤器通过它的名称找到,但input()output() 似乎从未被调用。创建了 css 文件,但显然没有任何压缩。有人对此有经验吗?

【问题讨论】:

    标签: python flask flask-assets webassets


    【解决方案1】:

    显然,这是一个缓存问题。更改过滤器名称使其工作。希望这可以帮助人们将头发拉出超过几 kB。

    【讨论】:

      【解决方案2】:

      使用 csscompressor 包压缩 CSS 的示例(pip install csscompressor)

      from csscompressor import compress
      from flask_assets import Bundle
      from webassets.filter import Filter, register_filter
      
      class NoopFilter(Filter):
          name = 'css_compress'
      
          def output(self, _in, out, **kwargs):
              css = compress(_in.read())
              out.write(css)
      
          def input(self, _in, out, **kwargs):
              css = compress(_in.read())
              out.write(css)
      
      
      register_filter(NoopFilter)
      
      
      bundles = {
          'app_css': Bundle(
              'css/responsive.css',
              'css/ads.css',
               filters='css_compress',
               output='all/app.css'
          ),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-05
        • 2011-09-14
        • 1970-01-01
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        相关资源
        最近更新 更多