我有一个Django项目,它使用Django压缩器来缩小和连接CSS文件,使用离线压缩。我还没有把它放在服务器上,但当我在GitHub Action中运行manage.py compress
时,在运行测试之前,它找不到{% compress %}
块,即使它可以找到包含它们的模板。
我有一个使用CSS文件的模板,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 %}
当在本地运行网站时,我可以使用以下Django设置:
DEBUG = False
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
当我运行manage.py compress
时,它会在static_collected/CACHE/CSS/
中生成一个预期的CSS文件。当我在浏览器中查看页面时(使用manage.py runserver --insecure
(,该文件在HTML中被链接。
但当我运行GitHub Action时,许多测试都失败了,因为缺少一个django压缩器没有生成的文件。
如果我在Action中运行manage.py compress --verbosity 2
,我可以看到它在所有其他模板中找到了正确的模板:
Found templates:
...
myapp/inc/form_field.html
myapp/layouts/base.html
admin/tree_list.html
...
但它不认为有什么可以压缩的:
Compressing... done
Compressed 0 block(s) from 9 template(s) for 1 context(s).
应该是1 block(s)
。我被难住了。
多亏了Dan的备忘单,我发现了问题:在我的GitHub Action中,我在manage.py collectstatic
之前运行manage.py compress
,认为collectstatic
需要收集生成的压缩CSS文件。
但它需要反过来,以便在compress
对所有静态文件进行处理之前,将其收集到位。
所以现在我的测试步骤看起来像这样:
- name: Run Tests
run: |
./manage.py collectstatic --verbosity=0 --noinput
./manage.py compress --verbosity=0
flake8 myproject
black . --check
coverage run ./manage.py test
env:
[all my env vars]