8

I am very new to django, and gone through tutorial for many days , i have started building a small website using django and trying to serve a css file by arranging all the necessary settings in settings.py file. But unfortunately my code is unable to serve the css file, i mean the concept of serving css files is not working. I googled a lot and gone through the django main doc tutorials and made changes according to them,and still doesn't works so approached SO and pasted my entire code below

Structure of project folder

 personnel_blog
      |____personnel_blog
      |____manage.py  |  
                      |____media
                      |____static
                      |       |____css
                      |             |____personnel_blog_hm.css 
                      |____template 
                      |        |____home_page.html
                      |____settings.py
                      |____urls.py
                      |____views.py
                      |____wsgi.py         

Some of my settings.py file settings are below

settings.py

import os
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
DEBUG = True
MEDIA_ROOT = os.path.join(PROJECT_DIR,'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'

STATICFILES_DIRS = (
                    os.path.join(PROJECT_DIR,'static'),
    # 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.
)
TEMPLATE_DIRS = (
                 os.path.join(PROJECT_DIR,'templates')
)
TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
)

urls.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
     url(r'^$', 'personnel_blog.views.home_page'),
     url(r'^admin/', include(admin.site.urls)),
)
if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True }),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True }),

)

views.py

from django.shortcuts import render_to_response

def home_page(request):
    return render_to_response("home_page.html")

home_page.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
  <head>
    <link rel="stylesheet" href="{{ STATIC_URL }}css/personnel_blog_hm.css" type="text/css">
  </head>
  <body>
   <p>Hello !</p>
   <a href="/" target="_top">Home</a>
  </body> 
</html>  

personnel_blog_hm.css

body { background-color:green; }
p {color:blue;background-color:green;padding-left:20px;}

So above is my code, can anyone please let me know whats wrong in the settigns.py file or other py files ?

Whether need to do any other additional settings in the above code ?

so can anyone please adjust my code and make necessary changes so that i cam move forward and make my first step in web designing ..... :)

4
  • where is the setting save? Commented Feb 26, 2013 at 5:35
  • What is the django version you are using? Commented Feb 26, 2013 at 5:46
  • @arulmr: Django version 1.4.3 Commented Feb 26, 2013 at 5:57
  • What does the generated HTML look like? Does STATIC_URL have a value? Commented Feb 26, 2013 at 6:40

5 Answers 5

12

base.html

{% load static %}

<link rel="stylesheet" href="{% static 'css/personnel_blog_hm.css' %}" type="text/css">

settings

PROJECT_DIR  = os.path.dirname(__file__) 

MEDIA_ROOT = os.path.join(PROJECT_DIR,'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'

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(PROJECT_DIR, 'staticfiles'),
)

url

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
     url(r'^$', 'personnel_blog.views.home_page'),
     url(r'^admin/', include(admin.site.urls)),
)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()
Sign up to request clarification or add additional context in comments.

22 Comments

Exception Type: NameError Exception Value: name 'static' is not defined
yeah now after importing,i am not getting the error, but css is not working as same
settings file is same in the directory where static folder exists as i have mentioned in the project structue above, yes i have edited PROJECT_DIR with your code
this is my terminal response : Django version 1.4.3, using settings 'personnel_blog.settings' Development server is running at 127.0.0.1:8000 Quit the server with CONTROL-C. [26/Feb/2013 11:39:59] "GET / HTTP/1.1" 200 938 [26/Feb/2013 11:39:59] "GET /css/personnel_blog_hm.css HTTP/1.1" 404 2334 [26/Feb/2013 11:40:00] "GET / HTTP/1.1" 200 938 [26/Feb/2013 11:40:01] "GET /css/personnel_blog_hm.css HTTP/1.1" 404 2334
Yup finally it worked after changing Debug value false to true and really thanks after for supporting by sparing your time
|
1

Try changing your STATICFILES_DIRS setting to

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR,'static'),
)

3 Comments

yeah i have tried and pasted the above code, still unable to work, really not able to understand what the problem is ...
@shivakrishna Can you tell me the response from the url localhost:8000/static?
This is the result for localhost:8000/static------ A server error occurred. Please contact the administrator.
0

Your problem is related to this line:

return render_to_response("home_page.html")

Django's template engine requires two things to properly render a template.

  1. The template name
  2. A context variable

The context variable is a key/value dictionary listing all of the variables available to the template.

The render_to_response shortcut actually accepts two different context variable parameters.

You're missing both.

Without these variables, the template doesn't have ANY variables available to it. So your {{ STATIC_URL }} template variable is probably blank.

To correct, try this:

from django.shortcuts import render_to_response
from django.template import RequestContext

def home_page(request):
    return render_to_response("home_page.html", {}, context_instance=RequestContext(request))

4 Comments

:k i have tried and edited my views file with the above code and still same result(css not working body color is not changed). Sorry many are trying to help me, but this is really wierd issue that not working and frustating me actually, whether this problem will be caused due to any installation errors/problems too ?
If you've done the above, check the generated HTML and make sure that {{ STATIC_URL }} is being replaced correctly. If it is, look at what happens when you visit 127.0.0.1:8000/static in your browser. Does it generate a 500 error?
this is the line in html <link rel="stylesheet" href="{{ STATIC_URL }}css/personnel_blog_hm.css" type="text/css"> and reponse Page not found (404) Request Method: GET Request URL: localhost:8000/static
No, the HTML as seen when you visit with your web browser.
0

in settings.py try.

PROJECT_DIR  = os.path.dirname(__file__)
...
MEDIA_ROOT = os.path.join(PROJECT_DIR,'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'

my settings.py file is usually in same directory as static directory

Comments

0

Try running this $ python manage.py collectstatic

You can check documentation here

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.