jeevank
jeevank

Reputation: 3

what is wrong with this code in settings.py file of my django application?

I am using Django 1.4 and Python 2.6 my operating system is Ubuntu 11.10. I am creating my Django app using these directories:

project directory: /var/dj/oneliners/

application directory: /var/dj/oneliners/oneline/

Now I want to serve my static directory for stylesheet so I configured settings.py as below:

MEDIA_ROOT = '/var/dj/oneliners/media/'

MEDIA_URL  = '/media/'

STATIC_ROOT = '/var/dj/oneliners/static/'

STATIC_URL = '/STATIC/'

I am unable to include my CSS in the index.html template when I go to http://127.0.0.1:8000/oneline/. What am I doing wrong?

Hello and thanks in advance, here is my entire settings.py file:

# Django settings for oneliners project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', '[email protected]'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'db_oneliner',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': 'admin@ubc7',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# 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.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'America/Chicago'

# 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: "/home/media/media.lawrence.com/media/"
import os.path
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), "media") 

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

# 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: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = os.path.join(os.path.dirname(__file__), "static")

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
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.
    "/var/dj/oneliners/static"
)
#ANONYMOUS_USER_ID = -1
# 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 = '6h5dvw*-^hb=l*2v@sn15r36fy&+mhv_+@#f=4az$-!()4hip_'

# 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 = 'oneliners.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'oneliners.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.
    "/var/dj/oneliners/mytemplates",
)

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',
    'oneline',
    'registration',
    'userena',
    'guardian',
    'easy_thumbnails',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

# 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,
        },
    }
}
ANONYMOUS_USER_ID = -1
AUTHENTICATION_BACKENDS = (
    'userena.backends.UserenaAuthenticationBackend',
    'guardian.backends.ObjectPermissionBackend',
    'django.contrib.auth.backends.ModelBackend',
)
AUTH_PROFILE_MODULE = 'oneline.MyProfile'
EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'

Upvotes: 0

Views: 935

Answers (3)

okm
okm

Reputation: 23871

Normally, there is no need to specify if settings.DEBUG: and lines below it: they are automatically loaded w/ staticfiles installed and runserver in DEBUG mode.

What you need to do is to make the STATICFILES_FINDERS to find the css file. For the two defined in you settings.py: FileSystemFinder searches dirs in STATICFILES_DIRS, AppDirectoriesFinder searches for the css in installed apps.

Thus, copy the file to /var/dj/oneliners/static or some_installed_app/static will do the trick. Note that before you start to collect statics to STATIC_ROOT, you could simply leave STATIC_ROOT='', and, STATIC_ROOT should be different from dirs defined in STATICFILES_DIRS (could contain) because they're different in logic.

Upvotes: 1

Joseph Victor Zammit
Joseph Victor Zammit

Reputation: 15310

In development you have to add a specific URL pattern to your urls in urls.py.

The Django docs talk about this in detail here.

Note that you should disable this url in production. So enable the URL pattern only in development, by doing for instance:

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',
         {'document_root': settings.STATICFILES_DIRS[0], 'show_indexes': True}),
    )

assuming the first STATICFILES_DIRS directory is the one containing your CSS (and other static files).

In production it is suggested to never serve static files via Django; do it via Apache or better, Nginx.

Upvotes: 1

neohope
neohope

Reputation: 1832

add this to your urlpatterns, it works for me (r'^css/(?P.*)$', 'django.views.static.serve', {'document_root': '/xxx/WebRoot/css'}),

Upvotes: 0

Related Questions