Как подключить статику в django
Перейти к содержимому

Как подключить статику в django

  • автор:

Как подключить 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.
Но тупо ниче не работает, ошибка вот такая.
5cb0363b13960734424287.png
Структура проекта вот такая:
5cb03689ee1f2018481806.png:c
Все подключаю в файле base.html
Дорогие люди, спасибо большое что прочитали этот бред по подключение файлика в джанго. Спасибо, за любую помощь.

  • Вопрос задан более трёх лет назад
  • 9048 просмотров

17 комментариев

Простой 17 комментариев

Lord_Dantes @Lord_Dantes Автор вопроса

5cb0380f5485d522215997.png

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

Lord_Dantes @Lord_Dantes Автор вопроса

5cb038a61b9f9295337341.png

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

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', ]

Настройка статических файлов в файле settings.py в проекте на Django

Переменная STATIC_URL имеет значение «static/», а это значит, что нам достаточно создать в папке приложения каталог с именем «static» и добавить в него необходимые нам статические файлы. Но, естественно, при необходимости через данную настройку мы можем изменить расположение каталога статических файлов.

Итак, добавим в папку приложения новый каталог static . Чтобы не сваливать все статические файлы в кучу, определим для каждого типа файлов отдельные папки. В частности, создадим в папке static для изображений каталог images , а для стилей — каталог css . Подобным образом можно создавать папки и для других типов файлов.

В папку static/images добавим какое-нибудь изображение — в моем случае это будет файл forest.jpg . А в папке static/css определим новый файл styles.css , который будет иметь какие-нибудь простейшие стили, например:

body < font-family: Verdana;>h1 img

Статчиеские файлы в проекте на Django

Теперь используем эти файлы в шаблоне. Для этого в начале файла шаблона необходимо определить инструкцию

При этом данный код должен идти после тега DOCTYPE.

Для определения пути к статическим файлам используются выражения типа

Так, пусть в приложении в папке templates определен шаблон index.html , который имеет следующий код:

     " /> Django на METANIT.COM  

Зимний лес

" alt="зимний лес" >

Работа со статическими файлами в веб-приложении на Django

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

подключение статических файлов в приложении на Django и Python

Настройка путей к файлам

Если нас не устраивает хранение файлов в каталоге по умолчанию — каталоге static, либо мы хотим указать несколько папок, то мы можем в файле settings.py задать все необходимые каталоги с помощью переменной STATICFILES_DIRS , которая принимает список путей:

STATICFILES_DIRS = [ BASE_DIR / "static", "/var/www/static/", "/somefolder/" ]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *