Как подключить CSS (хотя бы один файлик) в django?
Я уже пересмотрел И изучил больше 10 статей. Документации перечитал 3 раза.
Есть вот это:
STATIC_URL = ‘/static/’
Как я понимаю это относительный путь в django к моим статическим файлам.
Далее, есть вот это:
INSTALLED_APPS = [ 'products', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Ну это понятно по стандарту я ниче не удалял и не придумывал.
Далее вот это:
sitename "> replace me
Сверху подключаю статику, вот это я понимаю. Далее в подключаем опять статик урл и оно должно найти мой файлик main.CSS.
Но тупо ниче не работает, ошибка вот такая.
Структура проекта вот такая:
:c
Все подключаю в файле base.html
Дорогие люди, спасибо большое что прочитали этот бред по подключение файлика в джанго. Спасибо, за любую помощь.
- Вопрос задан более трёх лет назад
- 9048 просмотров
17 комментариев
Простой 17 комментариев
Lord_Dantes @Lord_Dantes Автор вопроса

Pavel Denisov, тоже самое.
Проект перезагрузил, файл base.html в котором все подключается обновил тоже.
Lord_Dantes @Lord_Dantes Автор вопроса

Pavel Denisov,
Сергей Горностаев @sergey-gornostaev Куратор тега Django
STATIC_URL — это не относительный путь к файлам, это абсолютный URL. Путь к файлам задаёт STATIC_ROOT .
Lord_Dantes @Lord_Dantes Автор вопроса
Сергей Горностаев, извиняюсь за ошибку, все верно. но все равно ошибка..
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), '/что-тотам/vitalik/static/',
в settings.py есть и правильный?
urlpatterns = [ … ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
STATIC_ROOT уже для деплоя
Lord_Dantes @Lord_Dantes Автор вопроса
Pavel Denisov, да. Запускаю через runserve. Если имеет значение я вроде не устанавливал ENV, но INCLUDE работает.
Lord_Dantes @Lord_Dantes Автор вопроса
776166, эту статью читал И изучал 3 раза вдоль и поперек.
Lord_Dantes @Lord_Dantes Автор вопроса
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), '/что-тотам/vitalik/static/',
таково нету.
Конфиги показывайте, чо.
Из settings.py всё про статику и urls.py целиком.
Slave, и как же вы доку читали, если нету?
Lord_Dantes @Lord_Dantes Автор вопроса
""" Django settings for vitalik project. Generated by 'django-admin startproject' using Django 2.1.3. For more information on this file, see https://docs.djangoproject.com/en/2.1/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.1/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, . ) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ 'products', '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 = 'vitalik.urls' TEMPLATES = [ < 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], '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', ], >, >, ] WSGI_APPLICATION = 'vitalik.wsgi.application' # Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = < 'default': < 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), >> # Password validation # https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators 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', >, ] # Internationalization # https://docs.djangoproject.com/en/2.1/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images)2 # https://docs.djangoproject.com/en/2.1/howto/static-files/ STATIC_URL = '/static/'
Как подключить статику в django
![]()
Django База [2023]: Подключение статики и медиа в Django ️ #5
05 января 2023
Оценки статьи
Еще никто не оценил статью
В данной статье мы добавим пути к статическим файлам, а также настроим папку media для загрузки превью для наших статей в Django 4.1.
Я обращаюсь к вам с просьбой о финансовой поддержке, чтобы помочь мне справиться с непредвиденной ситуацией, связанной с поломкой моей видеокарты. Как вы знаете, создание статей требует надежного оборудования, и видеокарта является важным компонентом для создания высококачественных материалов.
Я с большим энтузиазмом и преданностью занимаюсь написанием статей и созданием контента, который доступен абсолютно бесплатно. Моей целью является поделиться знаниями и помочь другим, но поломка видеокарты создала трудности и затраты, которые я самостоятельно не могу покрыть.
Ваше пожертвование поможет мне восстановиться от этой ситуации и продолжить создание качественного контента без препятствий. С каждым вкладом вы будете играть важную роль в моей возможности предоставлять информацию, обучение и вдохновение моим читателям и зрителям.
Все откликнувшиеся на зов помощи будут упомянуты после выполнения целей
Подключение статики и медиа
Для этого нам необходимо перейти в файл конфигурации Django: settings.py и добавить следующие параметры:
backend/settings.py
STATIC_URL = '/static/' STATIC_ROOT = (BASE_DIR / 'static') MEDIA_ROOT = (BASE_DIR / 'media') MEDIA_URL = '/media/'
Статические файлы из различных пакетов и из самого Django будут загружены в папку static, находясь в режиме деплоя, это когда параметр DEBUG = False .
Для работы media в режиме DEBUG = True нам необходимо добавить следующее в backend/urls.py
backend/urls.py
"""backend URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/4.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from django.conf.urls.static import static from django.conf import settings urlpatterns = [ path('admin/', admin.site.urls), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Сохраняем, и запускаем Django для проверки: py manage.py runserver , переходим в админ.панель и в нашу добавленную статью загружаем изображение:

Отлично, теперь мы можем загружать превью к нашим статьям. Но нам нужно кое-что улучшить, а именно разложить изображения по датам, чтобы мы могли знать, в какую дату было загружено изображение на наш сайт.
Поэтому внутри модели Article, в файле modules/blog/models.py я изменю поле thumbnail с этого:
blog/models.py
class Article(models.Model): """ Модель постов для сайта """ # Другие поля. thumbnail = models.ImageField( verbose_name='Превью поста', blank=True, upload_to='images/thumbnails/', validators=[FileExtensionValidator(allowed_extensions=('png', 'jpg', 'webp', 'jpeg', 'gif'))] )
blog/models.py
class Article(models.Model): """ Модель постов для сайта """ # Другие поля. thumbnail = models.ImageField( verbose_name='Превью поста', blank=True, upload_to='images/thumbnails/%Y/%m/%d/', validators=[FileExtensionValidator(allowed_extensions=('png', 'jpg', 'webp', 'jpeg', 'gif'))] )
Добавив /%Y/%m/%d/ , это обозначнает, что мы хотим сохранить изображение в по дате, например images/thumbnails/2023/01/05 .
Я удалю загруженное изображение и добавлю новое:

Мы ещё вернемся к работе с изображениями и напишем функцию, которая будет переименовывать изображения при загрузке, а также сделаем возможность оптимизации изображения с помощью пакета Pillow.
Меню категорий
-
Загрузка категорий.
Добро пожаловать в Блог Разработчика Владислава Александровича.
Ведется медленная, но уверенная разработка функционала сайта.
Django Core: 0.3.4 / Next.js 1.0 / UPD: 05.06.2023
Статика в Django runserver
В комплект с Django входит свой веб-сервер. Запускается он командой:
$ python3 manage.py runserver
После запуска сайт будет доступен по адресу http://127.0.0.1:8000. Для лучшего понимания текста, написанного ниже, рекомендуем прочитать статью Что такое веб-сервер.
Веб-сервер runserver называют отладочным. Для “боевых” условий он решительно не годится, об этом ясно указано в документации, но зато он чрезвычайно удобен в разработке и отладке. runserver берёт на себя все обязанности сразу: и HTML генерирует, и статику отдает, и даже с медиа работает, если его научить.
Чтобы получить от runserver файлы статики, нужно знать их адрес. Поведением сервера управляет настройка с названием STATIC_URL в файле settings.py . Если указано STATIC_URL = ‘/assets/’ , то браузер может получить файлы статики по адресу вида http://127.0.0.1:8000/assets/logo.png .
С путями к файлам статики всё несколько хитрее. В статье про веб-серверы упоминался STATIC_ROOT — это путь к каталогу, в котором веб-сервер ищет файлы статики. В файле settings.py есть настройка с таким названием STATIC_ROOT , и она влияет на работу веб-сервера в “боевом” режиме. А вот в отладочном режиме Django использует иной механизм. Так как файлов статики в больших проектах бывает много, то и хранить их удобнее не в одном каталоге STATIC_ROOT , а распределив по нескольким. Когда runserver получает запрос на очередной файл статики, то искать его он будет во всех каталогах, указанных в настройке STATICFILES_DIRS того же файла settings.py .
Для примера рассмотрим сайт Django с такими настройками в settings.py :
... STATIC_URL = '/assets/' STATICFILES_DIRS = [ '/home/site/static/', '/home/site/project/markup/', '/home/site/common/css/', ]
Если запустить отладочный веб-сервер runserver , то на запросы он будет реагировать так:
http://127.0.0.1:8000/assets/style.css
Адрес начинается с префикса, указанного в STATIC_URL — /assets/ , значит, это файл статики. Веб-сервер по очереди проверит каждый из каталогов в списке STATICFILES_DIRS , там будет искать файл style.css . Когда найдет — отправит файл браузеру.
http://127.0.0.1:8000/assets/imgs/logo.png
Снова адрес начинается с /assets/ , значит, веб-сервер будет искать файл статики imgs/logo.png в одном из каталогов STATICFILES_DIRS .
http://127.0.0.1:8000/static/photo.png
Префикс адреса /static/ не совпадает со значением STATIC_URL = ‘/assets/’ . Веб-сервер решит, что запрос относится к динамической части сайта, и попробует найти обработчик среди Python кода сайта. Скорее всего он ничего не найдет и вернет 404 Page not found.
Как подключить статику
Чтобы подключить файлы статики к Django вам достаточно выяснить две вещи: куда класть файлы и по какому адресу их получит браузер. Управляют этим две настройки STATIC_URL и STATICFILES_DIRS , обе живут в файле settings.py .
Отладочные print
Самый простой способ выяснить значение настроек — добавить отладочные print в конец файла settings.py :
print('STATIC_URL', STATIC_URL) print('STATICFILES_DIRS', STATICFILES_DIRS)
Теперь запустите в консоли любую команду с manage.py , например runserver , и увидите значение настроек:
$ python3 manage.py runserver . STATIC_URL /assets/ STATICFILES_DIRS ['/home/user/site/assets/']
Django Debug Toolbar
В больших проектах часто используют усложненные механизмы конфигурации и тогда простой способ с print может дать осечку. Но если на сайте установлено приложение Django Debug Toolbar, то у вас появляется второй вариант. Debug Toolbar это панель c отладочной информацией. Изначально панель свёрнута и отображается в виде небольшой сноски у правого края браузера. Развернув панель вы обнаружите несколько вкладок, вам понадобятся Settings и Static files :
Полезные ссылки
Если вы хотите ближе познакомиться с Django и разобраться во всех деталях, то начните погружение с этих статей:
- The staticfiles app
- Serving media files with runserver
- How to install Debug Toolbar
- Django Settings
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Как подключить статику в django
Веб-приложение, как правило, использует различные статические файлы — изображения, файлы стилей css, скриптов javascript и так далее. Рассмотрим, как мы можем использовать подобые файлы.
При создании проекта Django он уже имеет некоторую базовую настройку для работы со статическими файлами. В частности, в файле settings.py определена переменная STATIC_URL , которая хранит путь к каталогу со статическими файлами:
STATIC_URL = 'static/'
А среди установленных приложений в переменной INSTALLED_APPS указано приложение django.contrib.staticfiles
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'hello', ]

Переменная STATIC_URL имеет значение «static/», а это значит, что нам достаточно создать в папке приложения каталог с именем «static» и добавить в него необходимые нам статические файлы. Но, естественно, при необходимости через данную настройку мы можем изменить расположение каталога статических файлов.
Итак, добавим в папку приложения новый каталог static . Чтобы не сваливать все статические файлы в кучу, определим для каждого типа файлов отдельные папки. В частности, создадим в папке static для изображений каталог images , а для стилей — каталог css . Подобным образом можно создавать папки и для других типов файлов.
В папку static/images добавим какое-нибудь изображение — в моем случае это будет файл forest.jpg . А в папке static/css определим новый файл styles.css , который будет иметь какие-нибудь простейшие стили, например:
body < font-family: Verdana;>h1 img

Теперь используем эти файлы в шаблоне. Для этого в начале файла шаблона необходимо определить инструкцию
При этом данный код должен идти после тега DOCTYPE.
Для определения пути к статическим файлам используются выражения типа
Так, пусть в приложении в папке templates определен шаблон index.html , который имеет следующий код:
" />Django на METANIT.COM Зимний лес
" alt="зимний лес" >

При запуске приложения шаблон index.html будет генерироваться в следующую веб-страницу, которая будет использовать изображение и применять стили:

Настройка путей к файлам
Если нас не устраивает хранение файлов в каталоге по умолчанию — каталоге static, либо мы хотим указать несколько папок, то мы можем в файле settings.py задать все необходимые каталоги с помощью переменной STATICFILES_DIRS , которая принимает список путей:
STATICFILES_DIRS = [ BASE_DIR / "static", "/var/www/static/", "/somefolder/" ]