Статический url DJANGO связан с неправильной папкой

Я создаю приложение с Django, но у меня возникла проблема. Я использую DEBUG= True Я создал папку run/static, куда перемещаются все статические файлы, когда я использую команду collectstatic (так что это работает хорошо)

У меня есть это в настройках

STATIC_URL = '/static/' STATIC_ROOT = join(PROJECT_ROOT, 'run', 'static')

Теперь, для тестирования связи с папкой static, я попытался добавить файл по пути testapp/static/testapp/testfile.css

После запуска collect static, правильно, файл перемещается в run/static/testapp/testfile.css

Идеально. Проблема в том, что я обнаружил, что когда я запускаю сервер, URL http://127.0.0.1:8000/static/testapp/testfile.css не читает файлы в правильной папке (/run/static...), но читает их из /testapp/static... действительно, если я изменю имя файла в папке run на testfile1. css и попробовать URL http://127.0.0.1:8000/static/testapp/testfile1.css он не находит никакого файла, но если я изменю имя файла, находящегося в /testapp/static/testapp/ на testfile2.css и затем, не запуская collectstatic, попробую URL http://127.0.0.1:8000/static/testapp/testfile2.css он работает. Это означает, что статический URL "подключен" ко всем статическим папкам каждого приложения (например, testapp/static/testapp/), а не к статической папке, которую я выбираю с помощью STATIC_ROOT (run/static/testapp/).

Ясно ли, в чем моя проблема? Как вы думаете, в чем может быть ошибка?

Спасибо

То, что вы описываете, это то, как должен работать Django. Поэтому на самом деле никакой ошибки нет.

При запуске вашего сервера разработки с DEBUG = True, Django обслуживает статические файлы везде, где искатели статических файлов обнаруживают статические файлы. По умолчанию искатели ищут статические подкаталоги в каждом установленном приложении. Вы можете указать дополнительные каталоги с помощью параметра STATICFILES_DIRS.

Каталог STATIC_ROOT, в который команда collectstatic копирует все обнаруженные статические файлы, предназначен для производственных целей. В продакшене этот механизм очень удобен, так как вам нужно настроить ваш веб-сервер на обслуживание статических файлов (поскольку не рекомендуется использовать сервер разработки Django в продакшене). Вы можете просто указать веб-серверу (например, Nginx) на файл STATIC_ROOT.

Вы можете ознакомиться с документацией по Django здесь. Но, признаться, документация по этой теме не всегда очень понятна.

Чтобы заставить папку static работать как на удаленном Apache, так и на локальном сервере разработки Django, чтобы я мог использовать Git repo для синхронизации, это работает для меня. collectstatic будет просто создавать копии статических файлов, это испортит ваше Git-репо.

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, '/static/')
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"), '/var/www/mydjango/static/',] 
Вернуться на верх