I have a Django project that's using django-compressor to minify and concatenate CSS files, using offline compression. I haven't yet put it on a server, but when I run manage.py compress in a GitHub Action, before running tests, it can't find the {% compress %} block, even though it can find the template containing them.
I have a single template that uses CSS files, templates/myapp/layouts/base.html:
<!DOCTYPE html>
{% load compress static %}
<html lang="en">
<head>
<!-- ... -->
{% compress css file global %}
<link rel="stylesheet" href="{% static 'oohdir/css/global/variables.css' %}">
<link rel="stylesheet" href="{% static 'oohdir/css/global/reset.css' %}">
<link rel="stylesheet" href="{% static 'oohdir/css/global/form.css' %}">
<!-- etc -->
{% endcompress %}
When running the site locally I can have these Django settings:
DEBUG = False
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
and when I run manage.py compress it generates a single CSS file, as expected, in static_collected/CACHE/CSS/. That file is linked in the HTML when I view pages in the browser (using manage.py runserver --insecure).
But when I run my GitHub Action many tests fail because of a missing file, which django-compressor didn't generate.
If I run manage.py compress --verbosity 2 in the Action I can see it finds the correct template among all the others:
Found templates:
...
myapp/inc/form_field.html
myapp/layouts/base.html
admin/tree_list.html
...
But it doesn't think there's anything to compress in it:
Compressing... done
Compressed 0 block(s) from 9 template(s) for 1 context(s).
That should be 1 block(s). I'm stumped.
Thanks to Dan's cheat sheet I found the problem: In my GitHub Action I was running
manage.py compressbeforemanage.py collectstatic- thinking thatcollectstaticwould need to collect the generated, compressed, CSS file(s).But it needs to be the other way round, so that all the static files are collected in place before
compresscan do its work on them.So now my tests step looks something like this: