Я думаю, что это сложно, если вы не имеете права присоединиться к этому делу. 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
Поскольку у вас в списке приложений '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
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'some_new_static_folder'),
]
Также вы можете удалить все файлы из /root/static/
, вам не нужно ничего создавать внутри этой папки вручную, collectstatic
сделает это автоматически для производства.
Это простой подход для обработки статических файлов в django (который работает сразу после установки параметров Django по умолчанию):
STATIC_ROOT
. static
внутри приложения. static_files
в своем проекте и добавьте в свои настройки: STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_files'),]
. Очевидно, что вы можете выбрать другое имя, static_files
это просто предложение. collectstatic
, чтобы Django собрал ваши статические файлы (из пунктов 2. и 3.) и поместил их в папку, созданную вами в 1. Если вы находитесь в режиме отладки, вы закончите после шага 3.
В вашем случае проблема заключалась в том, что вы помещали статический контент в STATIC_ROOT
, который является папкой, в которой Django не будет искать контент в режиме отладки. admin
и ckeditor
работают, потому что следуют шагу 2. Таким образом, их статические файлы на самом деле приходят из папки установленного приложения, а не из папки static
в режиме отладки.
Итак, здесь, как решить вашу проблему :
img
и css
в папку, созданную на шаге 3. STATIC_ROOT
. У меня также были некоторые проблемы с локальными файлами, и это помогло моей ситуации.
Я храню свои статические файлы на 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/'
Ваши 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__)))