pythondjangodjango-staticfilesweb-frameworksdjango-static

Accessing Statics Files in Django


I am having a structure of Django Project as:

    │   db.sqlite3
    │   manage.py
    │
    ├───static
    │   │   1.jpg
    │   │   bg1.jpg
    │   │
    │   └───css
    │           login.css
    │
    ├───templates
    │       home.html
    │       login.html
    │       register.html
    │
    ├───User
    │   │   admin.py
    │   │   apps.py
    │   │   models.py
    │   │   tests.py
    │   │   urls.py
    │   │   views.py
    │   │   __init__.py
    │   │
    │   ├───migrations
    │   │   │   __init__.py
    │   │   │
    │   │   └───__pycache__
    │   │           __init__.cpython-38.pyc
    │   │
    │   └───__pycache__
    │           admin.cpython-38.pyc
    │           apps.cpython-38.pyc
    │           models.cpython-38.pyc
    │           urls.cpython-38.pyc
    │           views.cpython-38.pyc
    │           __init__.cpython-38.pyc
    │
    └───Website
        │   asgi.py
        │   settings.py
        │   urls.py
        │   wsgi.py
        │   __init__.py
        │
        └───__pycache__
                settings.cpython-38.pyc
                urls.cpython-38.pyc
                wsgi.cpython-38.pyc
                __init__.cpython-38.pyc

Settings.py """

from pathlib import Path
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-c*3$w_63@$^8g&_fn%r=-23n^e@nrmxzxt7eh*owsz^mlrk5dr'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

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

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 = 'Website.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 = 'Website.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.2/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/3.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'

STATICFILES_DIR= [os.path.join(BASE_DIR,'static'),
                  ]


# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

And my Register.html File

{% load static %}
<html>
<head>
    <title></title>
    <style>

    body
    {
    background:url({% static 'bg1.jpg' %});
    }
    </style>
</head>
<body>
<img src="{% static '1.jpg' %}">
<h1>    HELOO </h1>
</body>
</html>

I have loaded the static and also the path for the static files still its not able to find image which i am providing in my html page. No issues while using template folder but only for static folder my project is not able to get the images and paste it on the browser.


Solution

  • Changing STATICFILES_DIR to STATICFILES_DIRS in setting.py helped to fix this error. Thanks to Afzal Saiyed