Django: STATIC_ROOT STATIC_ROOT не может присоединиться к пути BASE_DIR
Я установил свой STATIC_ROOT следующим образом
STATIC_ROOT = os.path.join(BASE_DIR,'/vol/web/staticfiles')
print('this is base_dir')
print(BASE_DIR)
print("this is static_root")
print(STATIC_ROOT)
Когда я запускаю python manage.py runserver
, он выводит следующее:
this is base_dir
F:\7.Django\BLOG_PROJECT\src_blog
this is static_root
F:/vol/web/staticfiles
this is base_dir
F:\7.Django\BLOG_PROJECT\src_blog
this is static_root
F:/vol/web/staticfiles
Когда я запускаю python manage.py collectstatic
. Конечно! Он установил мой STATIC_ROOT в F:/vol/web/staticfiles
. Я заметил, что он выводит символ отдельной папки, отличающийся от '/' и ''. Я использую windows os.
Также не знаю, почему кажется, что мое приложение запускает настройки 2 раза. Вот мои настройки
├── settings <br /> | ├──__init__.py <br /> | ├──base.py <br /> | ├──dev.py <br /> | ├──prod.py <br />
и мой settings\__init__.py
файл содержит:
import os
from dotenv import load_dotenv
load_dotenv()
# you need to set "ENV_SETTING = 'prod'" as an environment variable
# in your OS (on which your website is hosted)
if os.environ['ENV_SETTING'] =='prod':
from .prod import *
else:
from .dev import *
from .base import *
Решено! Просто замените его на символ бэклаша вместо '/'.
Похоже, что это просто раздражающая вещь для windows vs linux.
STATIC_ROOT = os.path.join(BASE_DIR,'vol\web\staticfiles')
edit: Вы знаете, что мой ответ выше создаст проблему, когда вы используете свой код в контейнере базы Linux
@AbdulAzizBarkat дайте мне лучшее решение:
Вы не должны указывать слеши в вашем пути, если хотите, чтобы os.path.join
обрабатывал их правильно, следовательно, вы должны написать
os.path.join(BASE_DIR, 'vol', 'web', 'staticfiles')
Возможно, это решит вашу проблему.
STATIC_ROOT = BASE_DIR / 'path'