Идентичный и простой способ обслуживания статических файлов в разработке и производстве - возможно ли это?

Возможно ли иметь статические файлы только в каталоге PROJECT_DIR/static без дубликатов статических файлов в каталогах приложений и без необходимости выполнять команду collectstatic? На локальном компьютере используется сервер Django dev, в продакшене - какой-то другой веб-сервер. Из того, что я прочитал до сих пор, я решил, что это невозможно, но, возможно, это неправда.


person DSblizzard    schedule 30.05.2013    source источник


Ответы (1)


Конечно, это возможно. Приложение для статических файлов может быть полезным. Если вам не нравятся «дубликаты» (в этом весь смысл — у вас могут быть файлы для каждого приложения, объединенные в одну область), не используйте приложение staticfiles.

Просто используйте любую папку в любом месте в качестве папки с активами. В продакшене обслуживайте его по какому-нибудь URL-адресу, скажем, MY_URL. В процессе разработки подключите свою URLConf для обслуживания файлов в папке ресурсов по адресу MY_URL.

https://docs.djangoproject.com/en/1.5/howto/static-files/#serving-files-uploaded-by-a-user

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static('MY_URL', document_root='path-to-my-files')

Это метод старой школы, до того, как статические файлы принесли свои плоды.

Вы уверены, что не можете решить эту проблему, просто используя приложение staticfiles? Добавить python manage.py collectstatic --noinput в сценарий развертывания не составит большого труда.

person Yuji 'Tomita' Tomita    schedule 30.05.2013
comment
Я добавил import и + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) в urlpatterns, но css не загружается (из подкаталога приложения он загружается нормально). Что еще можно упустить? - person DSblizzard; 30.05.2013
comment
Я бы не стал этого делать, так как ваша цель - вообще не использовать статические файлы.. но тогда файлы из settings.STATIC_ROOT будут доступны в settings.STATIC_URL в разработке. В любом случае это происходит автоматически. Сервер запуска по умолчанию в разработке делает именно это. - person Yuji 'Tomita' Tomita; 30.05.2013
comment
Я забыл прокомментировать «django.contrib.staticfiles» в INSTALLED_APPS. - person DSblizzard; 30.05.2013