Django-compressor: 收集、连接并*然后*传递给过滤器?

创建于 2011-04-15  ·  6评论  ·  资料来源: django-compressor/django-compressor

你好! 有没有办法收集和连接特定块中的 CSS 或 JS,然后_然后_通过过滤器链传递它? 特别是,我想使用 pyScss 来处理我的 SCSS。 我创建了一个pySCSSFilter扩展FilterBase ,我真的很想做这样的事情:

{% compress css %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/mixins.scss" />
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/base.scss" />
<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/other.scss" />
{% endcompress %}

但当然不会不起作用,因为我的文件是相互隔离处理的。

有办法吗?

干杯!

feature

最有用的评论

当较少使用 css 预处理器时非常重要,它的“核心”功能是允许使用 mixins。 因此,在通过过滤器处理之前连接文件是必须具备的功能。 是否有任何计划将@jannon请求合并到 dev 分支 django_compressor?

所有6条评论

嗯,这正是我不想要的。

如果它们不在同一个基本路径中,并且具有相同的@import语句但引用不同的文件,因为它们在不同的路径中怎么办。

现在@import甚至不起作用,因为文件的内容在传递给处理器之前被写入临时文件。

我说一个一个处理文件然后连接,所以所有编译参考都是正确的。

我将投票支持在预编译之前连接文件的方法。 这在使用 less 等时非常有帮助,因为一个标准是将 mixin 和全局变量保存在一个文件中,并在编译之前将其合并。 现在,您必须在每个 css 文件中重复这些变量和混合变量,即如果您有一组用于多个 css 文件的肤色全局变量,这会破坏在 sass 或更少的 css 框架中使用全局变量的目的, 除非您将所有内容都保存在一个文件中。

我理解 hvdklauw 提到的问题,所以也许它可能是每个压缩块上的一个选项,是否在预编译之前或之后合并?

@gensmann在 compress 块中添加一个选项听起来像是一个计划,是的。

当较少使用 css 预处理器时非常重要,它的“核心”功能是允许使用 mixins。 因此,在通过过滤器处理之前连接文件是必须具备的功能。 是否有任何计划将@jannon请求合并到 dev 分支 django_compressor?

关于 Sass,我的方法是定义 sass 二进制文件的所有包含路径,然后在我的 scss 文件中定义@import其他文件:

# app/settings/common.py
...
scss_args = " ".join(["--include-path %s/vendor/bourbon/app/assets/stylesheets/" % VENDOR_ROOT,
                      "--include-path %s/vendor/bootstrap-sass-official/vendor/assets/stylesheets/" % VENDOR_ROOT])
...

COMPRESS_PRECOMPILERS = (
    ('text/coffeescript', 'node_modules/.bin/coffee --compile --stdio'),
    ('text/x-scss', 'node_modules/.bin/node-sass %s {infile} {outfile}' % scss_args)
)
...
// app/common/static/css/screen.scss
<strong i="9">@import</strong> url("http://fonts.googleapis.com/css?family=Montserrat:400,700");
<strong i="10">@import</strong> "./vendor.scss";
<strong i="11">@import</strong> "./elements.scss";
<strong i="12">@import</strong> "./pages.scss";

body, html {
    font-family: 'Montserrat';
}
// app/common/static/css/vendor.scss
<strong i="15">@import</strong> "_bourbon.scss";
<strong i="16">@import</strong> "bootstrap.scss";
<! -- app/common/templates/base.html -->
...
{% compress css %}
<link href="{% static 'css/screen.scss' %}" type='text/x-scss' media='screen, projector' rel='stylesheet'>
{% endcompress %}
...

@airtonix我开始这样做了,但是对任何@import ed 文件的更改都不会被监视,因此对于其中的每个 css 更改,都需要重新启动服务器。
有点惊讶这个功能还没有实现。 webassets解决了这个问题,允许用户使用SASS_AS_OUTPUT = True ,它可以选择先连接文件。

此页面是否有帮助?
0 / 5 - 0 等级