如何在Django中使用Sass并将CSS和JS资产版本化以进行缓存清除

时间:2016-12-29 15:59:20

标签: javascript css django laravel gulp

所以我在Laravel / MySQL开始了一个项目,在与一些经验丰富的开发人员交谈之后,Django / PostgreSQL可能是该应用程序的更好选择。

尽管是一个Django新手,我一直在将它转换为Django,而Laravel中有一个功能我没有在Django中看到我想知道如何实现。在Laravel中,它是GulpElixir的组合,它管理Sass到CSS编译以及版本化CSS和JS文件。

在Laravel的gulpfile.js中代码是这样的:

elixir((mix) => {
    mix.sass('styles.scss')
       .version(['css/app.css', 'js/app.js', 'css/styles.css', 'js/custom.js']);
});

然后将其读入Blade模板:

<!-- Styles -->
<link rel="stylesheet" href="{{ elixir('css/app.css') }}">
<link rel="stylesheet" href="{{ elixir('css/styles.css') }}">    

<!-- Scripts -->
<script src="{{ elixir('js/app.js') }}"></script>
<script src="{{ elixir('js/custom.js') }}"></script>

我没有在Django中看到类似的功能,所以想知道如何实现它,因为它非常方便转向watch然后拥有资产Sass-&gt; CSS和JS编译和版本化。

我确实看到了各种npm个软件包:gulpgulp-djangodjango-sass等等。然后我会看到其他软件包,例如gulp-buster或{ {1}}。如果这些软件包附带gulp-cache-bust,除了gulp之外需要下载,或者我只需要gulp具体django,我就不清楚}。

在这里想到某人会知道如何在Laravel中为gulp / Gulp组合添加类似的功能。

1 个答案:

答案 0 :(得分:1)

我使用django_assets。对于我的CSS和SASS文件,我使用了一个assets.py文件,如下所示:

css_bundle = Bundle(
    'scss/main.scss',
    depends=('scss/**/*.scss',),
    filters='pyscss,cssmin',
    output='compiled/main.min.css'
)

register('css_bundle', css_bundle)

然后我可以在我的模板中包含这样的内容:

{% assets "css_bundle" %}
  <link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}

缓存清理是内置的,你可以为JS文件做类似的事情。