views:

1872

answers:

8

I'm building a django app and I can't get the templates to see the CSS files... My settings.py file looks like:

MEDIA_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'media')
MEDIA_URL = '/media/'

I've got the CSS files in /mysite/media/css/ and the template code contains:

<link rel="stylesheet" type="text/css" href="/media/css/site_base.css" />`

then, in the url.py file I have:

# DEVELOPMENT ONLY
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': '/media'}),

but the development server serves the plain html (without styles). What am I doing wrong?

+4  A: 

in the "development only" block in your urls.py you need to change

(r'^media/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': '/media'}),

to...

(r'^media/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': settings.MEDIA_ROOT}),
Jiaaro
A: 

I had a similar problem when I was trying to get jQuery to work. My fix was to add an alias to my Apache httpd.conf file that pointed to the folder containing the .js. You could do the same with your CSS folder.

AlbertoPL
+2  A: 

On the dev server, I like to cheat and put the following in my urls.py

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^includes/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/static/files'}),
    )

That way anything in the project under the "/includes" folder is server by the dev server. You could just change that to "/media".

Tom
+2  A: 

ADMIN_MEDIA_PREFIX is set to \media\ by default, and is probably 'stealing' the path. Change that setting, or use a different one for non-admin media - eg site_media or assets.

Daniel Roseman
A: 

OK - I got it working based on what you folks have said. The answer is:

settings.py:

MEDIA_ROOT = 'd://web//mysite//media//'  #absolute path to media
MEDIA_URL = '/mymedia/' #because admin already using /media

site_base.html:

<link rel="stylesheet" type="text/css" href="/mymedia/css/site_base.css" />

urls.py

from mysite import settings
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^mymedia/(?P<path>.*)$', 'django.views.static.serve',  
         {'document_root':     settings.MEDIA_ROOT}),
    )

And voila! It works.

Technical Bard
Please edit your original question.
Lucas Jones
... instead posting a new answer. Thanks.
Lucas Jones
A: 

A mi no me funciona (r'^mymedia/(?P<path>.*)$'

# Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
    # to INSTALLED_APPS to enable admin documentation:
     (r'^admin/doc/', include('django.contrib.admindocs.urls')),
     (r'^media/(?<path>.*)$','django.views.static.serve','document_root':settings.MEDIA_ROOT),
morfeokmg
A: 

Even this isn't working for me.

settings.py

MEDIA_ROOT = 'C:/djangotest/codificador/static/' MEDIA_URL = '/static/'

urls.py

(r'^static/(?P.*)$', 'django.static.views.serve', {'document_root': settings.MEDIA_ROOT}),

base.html

body { background-image:url(/static/images/bg_green.jpg);

shwetanka
+1  A: 

It also worked for me, thanks guys !!

settings.py

MEDIA_ROOT = '/home/pi/ewspaces/ws-classic/xima/media'

MEDIA_URL = '/statics/'

urls.py

if settings.DEBUG:
urlpatterns += patterns('',
    (r'^statics/(?P<path>.*)$', 'django.views.static.serve',  
     {'document_root':     settings.MEDIA_ROOT}),
)

inside templates:

<link type="text/css" href="/statics/css/base/jquery.ui.all.css" rel="stylesheet" />
berserkpi