在Django中为devel和production生成不同的静态文件

时间:2015-07-13 19:59:56

标签: django django-staticfiles django-deployment django-static django-dev-server

我有一个制作和本地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,我可以删除.min扩展名。干净利落的方式?

我想要注意我知道我可以实现一些html-parser,它会在每次部署时添加它,但我正在寻找一个整洁且面向django的解决方案。

3 个答案:

答案 0 :(得分:1)

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

django-compressor:http://django-compressor.readthedocs.org/en/latest/ django-pipeline:https://django-pipeline.readthedocs.org/en/latest/

我开始使用django-pipeline,但最近已经转向使用压缩器。看到文档,我相信一个将是你正在寻找的。祝你好运!

答案 1 :(得分:1)

我喜欢@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 %}

答案 2 :(得分:0)

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

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

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

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