Служите различным статическим файлам на 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 %}

Я никогда не сталкивался с этой проблемой, но я придумываю эти два решения:

  1. Используйте разные settings.py для производства и разработки. Но для этого нужны одинаковые имена *.min.js и измените конфигурацию минификатора.
  2. Или используйте глобальную переменную и пишите везде

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

Django - Как сделать переменную доступной для всех шаблонов?

Другие вопросы по тегам