Служите различным статическим файлам на devel и production в 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">
Есть ли способ достичь и автоматизировать это поведение, добавив что-то в средство развертывания? Есть ли какой-то другой обходной путь (я мог бы избавиться от расширения.min, если можно добавить.gz чистым способом?
Хочу отметить, что я знаю, что мог бы реализовать html-парсер, который добавляет его при каждом развертывании, но я ищу аккуратное и ориентированное на django решение.
3 ответа
Как обычно, для этого есть пакет Django! Есть два, которые я использую:
Джанго-компрессор: http://django-compressor.readthedocs.org/en/latest/ Джанго-конвейер: https://django-pipeline.readthedocs.org/en/latest/
Я начал с django-pipel, но в последнее время перешел на использование компрессора. Посмотрите документы, я считаю, что один будет то, что вы ищете. Удачи!
Мне нравится идея @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 %}
Я никогда не сталкивался с этой проблемой, но я придумываю эти два решения:
- Используйте разные
settings.py
для производства и разработки. Но для этого нужны одинаковые имена*.min.js
и измените конфигурацию минификатора. Или используйте глобальную переменную и пишите везде
{% if development_stage %} <link> {% else %} <link> {% endif %}
Django - Как сделать переменную доступной для всех шаблонов?