Django: Как я могу распаковать статические файлы в режиме разработки? - PullRequest
7 голосов
/ 28 сентября 2011

Кажется, мои настройки django.contrib.staticfiles в порядке, так как все статические файлы обслуживаются должным образом. Однако, например. Файлы /static/*.css не распаковываются, хотя у меня включена программа GZipMiddleware.

Fyi. html моих просмотров действительно получает gzipped, только файлы, обслуживаемые приложением staticfiles, этого не делают. Кажется, эти ответы не проходят через цепочку промежуточного программного обеспечения?

Ответы [ 3 ]

6 голосов
/ 06 октября 2011

Хитрость заключается в том, чтобы сервер разработки работал с установленным флагом --nostatic: ./manage.py runserver --nostatic.

Затем можно использовать шаблон URL для обслуживания статических файлов, например:

if settings.DEBUG:
    static_pattern = r'^%s(?P<path>.*)$' % (settings.STATIC_URL[1:],)
    urlpatterns += patterns('django.contrib.staticfiles.views',
        url(static_pattern, 'serve', {'show_indexes': True}),
    )

При запуске без --nostatic django будет автоматически обслуживать объекты в STATIC_URL без прохождения цепочки промежуточного программного обеспечения.

Спасибо Дейву за его указатели!

2 голосов
/ 28 сентября 2011

Возможно, у вас нет GZipMiddleware В ТОПе вашего settings.MIDDLEWARE_CLASSES?Это может вызвать странное поведение.

Однако, если это рабочий сервер, вам, вероятно, вообще не следует обслуживать статические файлы с помощью django.Я бы порекомендовал gunicorn и nginx.

РЕДАКТИРОВАТЬ: Если не это, что если вы подадите файлы "вручную" через urls.py, используя что-то вроде:

urlpatterns += staticfiles_urlpatterns() + \
        patterns('',
            (r'^%s/(?P<path>.*)$' % settings.MEDIA_URL.strip('/'), 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
            *[(r'^%s/(?P<path>.*)$' % settings.STATIC_URL.strip('/'), 'django.views.static.serve', {'document_root': path, 'show_indexes': True}) for path in settings.STATICFILES_DIRS]
        )

Альтернатива # 3: Nginx довольно легко установить локально, и вы можете просто указать его на своем сервере Django (нет необходимости в gunicorn / uwsgi / что угодно).

0 голосов
/ 28 сентября 2011

В производственной среде ваш веб-сервер (Apache / Nginx / IIS) позаботится о gzipping static, поэтому не имеет значения, работает ли gzip в dev или нет.

...