在 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。请参阅文档,我相信其中一个就是您要找的。祝你好运!
我从来没有遇到过这个问题,但是我想出了这两个解决方案:
- 使用不同的
settings.py
进行生产和开发。但它需要 *.min.js
具有相同的名称并更改 minifier 的配置。
或者用一个全局变量,到处写
{% 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 %}
我有一个生产环境和本地 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。请参阅文档,我相信其中一个就是您要找的。祝你好运!
我从来没有遇到过这个问题,但是我想出了这两个解决方案:
- 使用不同的
settings.py
进行生产和开发。但它需要*.min.js
具有相同的名称并更改 minifier 的配置。 或者用一个全局变量,到处写
{% 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 %}