在 Django 中为开发和生产提供不同的静态文件

Serve different Static files on devel and production in Django

我有一个生产环境和本地 DJANGO 开发环境。为了将产品推向生产环境,我们有一个部署程序可以压缩和压缩所有 CSS 和 JS 文件。

为了在生产环境中为他们服务,我需要像

这样称呼他们
  <link rel="stylesheet" href="{{ STATIC_URL }}css/filename.min.css.gz">

但是在开发过程中,我希望提供正常的 css 文件(这样我就不必在每次保存时都重新缩小和 gzip):

  <link rel="stylesheet" href="{{ STATIC_URL }}css/filename.css">

有没有办法通过向部署程序添加一些东西来实现和自动化此行为?是否有其他解决方法(如果可以将 .gz 添加到干净的方式?

我想指出,我知道我可以实现一些 html-解析器,它会在每次部署时添加它,但我正在寻找一个简洁且面向 django 的解决方案。

像往常一样,有一个 Django 包!我用的有两个:

django 压缩器:http://django-compressor.readthedocs.org/en/latest/ django 管道:https://django-pipeline.readthedocs.org/en/latest/

我开始使用 django-pipeline,但最近已经开始使用 compressor。请参阅文档,我相信其中一个就是您要找的。祝你好运!

我从来没有遇到过这个问题,但是我想出了这两个解决方案:

  1. 使用不同的 settings.py 进行生产和开发。但它需要 *.min.js 具有相同的名称并更改 minifier 的配置。
  2. 或者用一个全局变量,到处写

    {% if development_stage %} <link> {% else %} <link> {% endif %}

Django - How to make a variable available to all templates?

我喜欢@Nursultan 的想法。要强制执行此操作,您可以编写这样的上下文处理器:

# On yourapp.context_processor.py
from django.conf import settings

def debug_set(request):
    return {'debug_set': settings.DEBUG}

# On your settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
    .
    .
    .
    'yourapp.context_processors.debug_set',
)

# On your templates
{% if debug_set %}
    <link rel="stylesheet" href="{{ STATIC_URL }}css/filename.css">
{% else %}
    <link rel="stylesheet" href="{{ STATIC_URL }}css/filename.min.css.gz">
{% endif %}