Загрузка статических файлов Django 2.1 в производство, но не в разработку

Я думаю, что это сложно, если вы не имеете права присоединиться к этому делу. ex с оракулом.

with a as(
     select 1 id, 'a' name from dual union all
     select 2 id, 'b' name from dual union all
     select 3 id, 'c' name from dual union all
     select 4 id, 'd' name from dual union all
     select 5 id, 'e' name from dual union all
     select 6 id, 'f' name from dual 
), bx as(
   select 1 id, 'fa' f from dual union all
   select 3 id, 'fb' f from dual union all
   select 6 id, 'f' f from dual union all
   select 6 id, 'fc' f from dual 
)
select a.*, b.f, x.f
from a left join bx b on a.id = b.id
right join bx x on a.id = x.id
order by a.id
4
задан Jack Parkinson 8 March 2019 в 22:22
поделиться

4 ответа

Поскольку у вас в списке приложений 'django.contrib.staticfiles', Django фактически НЕ загружает файлы из STATIC_ROOT, когда DEBUG имеет значение True.

Когда DEBUG включен, Django использует опцию STATICFILES_FINDERS, которая по умолчанию:

[
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

FileSystemFinder найдет файлы, сохраненные в настройке STATICFILES_DIRS, а AppDirectoriesFinder ищет файлы в подкаталоге static каждого приложения.

Вот почему папки admin и ckeditor работают - Django вообще не использует вашу папку / root / static, когда DEBUG имеет значение True. Вместо этого он получает файлы от AppDirectoriesFinder из подкаталогов apps static. Что-то вроде ... / 3.5 / lib / python3.5 / site-packages / django-ckeditor / static / ...

Когда вы запускаете команду collectstatic, она собирает все статические файлы, которые STATICFILES_FINDERS может найти, и копирует их в ваш STATIC_ROOT (/ root / static /), и если DEBUG имеет значение False, Django просто использует эту папку вместо STATICFILES_FINDERS

[1113 Итак, как вы можете заставить его работать с включенной отладкой. Просто создайте папку и добавьте ее в STATICFILES_DIRS следующим образом:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'some_new_static_folder'),
]

Также вы можете удалить все файлы из /root/static/, вам не нужно ничего создавать внутри этой папки вручную, collectstatic сделает это автоматически для производства.

0
ответ дан MrBinWin 8 March 2019 в 22:22
поделиться

Это простой подход для обработки статических файлов в django (который работает сразу после установки параметров Django по умолчанию):

  1. Никогда ничего не вкладывайте в папка, указанная вами как STATIC_ROOT .
  2. Поместите статические файлы, относящиеся к приложению, в папку static внутри приложения.
  3. Для статических файлов, которые непосредственно не принадлежат приложению, создайте папку static_files в своем проекте и добавьте в свои настройки: STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_files'),]. Очевидно, что вы можете выбрать другое имя, static_files это просто предложение.
  4. Для производства запустите collectstatic, чтобы Django собрал ваши статические файлы (из пунктов 2. и 3.) и поместил их в папку, созданную вами в 1.

Если вы находитесь в режиме отладки, вы закончите после шага 3.


В вашем случае проблема заключалась в том, что вы помещали статический контент в STATIC_ROOT, который является папкой, в которой Django не будет искать контент в режиме отладки. admin и ckeditor работают, потому что следуют шагу 2. Таким образом, их статические файлы на самом деле приходят из папки установленного приложения, а не из папки static в режиме отладки.


Итак, здесь, как решить вашу проблему :

  • сделать шаг 3. сверху.
  • переместите ваши папки img и css в папку, созданную на шаге 3.
  • (необязательно) вытрите папку STATIC_ROOT.
0
ответ дан jojo 8 March 2019 в 22:22
поделиться

У меня также были некоторые проблемы с локальными файлами, и это помогло моей ситуации.

Я храню свои статические файлы на S3, но вы можете настроить URL-адрес вашего изображения.

if DEBUG == False:
    STATICFILES_LOCATION = 'static'
    STATIC_URL = "//%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION)
    MEDIAFILES_LOCATION = 'media'
    MEDIA_URL = "//%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION)
else:
    MEDIA_URL = '/media/'
    STATIC_URL = '/static/'
0
ответ дан WayBehind 8 March 2019 в 22:22
поделиться

Ваши urlpatterns правильные, что означает, что проблема, скорее всего, settings.DEBUG = False в файле настроек. Убедитесь, что settings.DEBUG равно True, и статические файлы должны загрузиться. Вы можете проверить это, используя manage.py shell и проверив значение флага DEBUG.

Единственные другие проблемы, которые нужно искать, это то, указываете ли вы на правильный файл urls в ваших настройках, проверяя настройку ROOT_URLCONF, и указывает ли ваш BASE_DIR на родительский каталог каталога static. Оба значения также могут быть проверены в shell.

Например, если ваш файл настроек находится в /path/to/root/blog/settings.py, то вы устанавливаете BASE_DIR как:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
0
ответ дан 2ps 8 March 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: