@dimasik24na7

Django, как устранить ошибку 404 с файлами из static?

Недавно начал изучение фреймворка Django и создал первый проект по туториалу и при подключении файла стилей в base.html
<link rel="stylesheet" type="text/css" href="{% static 'style/style.css' %}">
столкнулся с ошибкой [16/May/2020 17:34:41] "GET /static/css/main.css HTTP/1.1" 404 1662 в командной строке при запуске сервера.

Содержание файла settings.py
import os, sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
DEBUG = True

ALLOWED_HOSTS = []
INSTALLED_APPS = [
    'grappelli',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'buysellhome.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(PROJECT_ROOT)
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.request'
            ],
        },
    },
]

WSGI_APPLICATION = 'buysellhome.wsgi.application'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
LANGUAGE_CODE = 'ru-RU'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')


Структура проекта
5ebfe8753687a034996091.png
  • Вопрос задан
  • 5910 просмотров
Пригласить эксперта
Ответы на вопрос 5
Sobolev5
@Sobolev5
Python developer
Сталкивался с похожей проблемой при разработке на ноутбуке.
Мое решение.

LOCAL_MACHINE_DEV = os.getenv("LOCAL_MACHINE_DEV") == "1"

if LOCAL_MACHINE_DEV:
    STATICFILES_DIRS = ["/my/project/static"]
else:
    STATIC_ROOT = os.path.join(PROJECT_PATH, "static")
Ответ написан
Комментировать
@abel852456
https://docs.djangoproject.com/en/3.2/howto/static...
Этот метод сработал для меня
Я добавил это в свой файл setting.py

PATH_TO_YOUR_STATIC_FOLDER='bysellhome/static/style'
STATICFILES_DIRS = [
    BASE_DIR / "static",
    PATH_TO_YOUR_STATIC_FOLDER,
]
Ответ написан
Комментировать
alternativshik
@alternativshik
в урлах что? Надо добавить
if settings.DEBUG:
        urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Ответ написан
@siarheisiarhei
а, зачем тебе такая каша-путаница - ну во всем....?
Ответ написан
Комментировать
Как думаете, что возвращает :
os.path.dirname(__file__)
Оно вернёт местоположение файла settings.py, который лежит на уровень выше от static.
В итоге вы получите директорию, которая находится как бы в директории вместе с файлом settings.py, и она как бы сильно отличается от нужной.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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