0

I'm using Django, and for some reason, no matter what I do, the "static" folder containing things such as the CSS is not being loaded. I've searched through all the other questions and none of those solutions worked. Here is my settings.py file:

# Django settings for liuSite project.

import os
BASE_DIR = os.path.realpath(os.path.dirname(__file__))

DEBUG = False
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'default_data',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'username',
        'PASSWORD': 'userpass',
        # 'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        # 'PORT': '',                      # Set to empty string for default.
    }
}

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ['localhost','127.0.0.1']

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Phoenix'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(BASE_DIR, "static"),
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '-'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'liuSite.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'liuSite.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'liuNetwork',
)

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

I used BitNami Stack for Django to set it up, if that makes a difference.

Thanks in advance!

UPDATE: Here is my file structure:

liuSite/
    manage.py
    default_data
    liuSite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    liuNetwork/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

UPDATE #2: I just noticed that I'm getting this log in the console when I visit the admin page:

----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 58045)
Traceback (most recent call last):
  File "/Users/nathanapple/Library/Containers/com.bitnami.django/Data/app/python/lib/python2.7/SocketServer.py", line 582, in process_request_thread
    self.finish_request(request, client_address)
  File "/Users/nathanapple/Library/Containers/com.bitnami.django/Data/app/python/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/Users/nathanapple/Library/Containers/com.bitnami.django/Data/app/apps/django/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 150, in __init__
    super(WSGIRequestHandler, self).__init__(*args, **kwargs)
  File "/Users/nathanapple/Library/Containers/com.bitnami.django/Data/app/python/lib/python2.7/SocketServer.py", line 640, in __init__
    self.finish()
  File "/Users/nathanapple/Library/Containers/com.bitnami.django/Data/app/python/lib/python2.7/SocketServer.py", line 693, in finish
    self.wfile.flush()
  File "/Users/nathanapple/Library/Containers/com.bitnami.django/Data/app/python/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------

I don't know if that's a separate issue.

Thanks!

Zoyt
  • 4,809
  • 6
  • 33
  • 45

4 Answers4

1

Read the comment above STATIC_ROOT in the settings file...

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = ''

Everything you place in the static/ folder will be copied to the folder specified in STATIC_ROOT when you run manage.py colectstatic. They will then be served from a virtual path /static on your site (assuming django is in DEBUG mode)

Note that if DEBUG = False as you have it now, django won't serve static files at all and you need to do that yourself. I'm unfamiliar with bitnami which may handle this last step for you. This answer implies that it does.

Community
  • 1
  • 1
Basic
  • 26,321
  • 24
  • 115
  • 201
1

In settings.py

 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
   STATIC_ROOT = os.path.join(BASE_DIR, 'static')
   STATIC_URL = '/static/'

   STATICFILES_DIRS = [
       os.path.join(BASE_DIR, "static")
   ]
Nids Barthwal
  • 2,205
  • 20
  • 12
0

try this:

import os
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))

STATIC_ROOT = os.path.join(PROJECT_PATH, "static")
STATIC_URL = '/static/'
doniyor
  • 36,596
  • 57
  • 175
  • 260
  • Thanks, but no luck. I updated the post with more info, if that helps. – Zoyt May 23 '14 at 18:50
  • @Zoyt in your app ``liuNetwork`` you need to create the folder ``static`` manuelly. and under that static folder, create folders ``css``,``js``,``img`` and refer in template like this: {{STATIC_URL}}css/style.css``. pls let me know if this works – doniyor May 23 '14 at 19:49
  • What's the difference between that and doing `python manage.py collectstatic`? I forgot to add that calling `collectstatic`places it in `liuSite`, not `liuNetwork`. But I'll try copying the files created by `collect static`. **Edit**: Ya, copying those files isn't working. – Zoyt May 23 '14 at 21:46
  • 1
    you create and copy to static folder only in dev. in prod you do collectstatic which automatically creates and moves the files from your created static folder to new one which is now served by apache. – doniyor May 24 '14 at 05:35
0

This issue can also arise due to improper configurations of your static files in settings.py file. For me it turned out that I didn't put a leading slash to "static/". e.g

this did not load my admin css. But after putting a slash it started to load my css.

STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, STATIC_URL)



STATIC_URL = '/static/' # changed
STATIC_ROOT = os.path.join(BASE_DIR, STATIC_URL)
Nomi
  • 185
  • 2
  • 13