'Django admin not serving static files?

Django 1.6

I'm having trouble serving my static files for my Django Admin.

urls.py:

urlpatterns = patterns('',
    url(r'^$', 'collection.views.index', name='home'),
    url(r'^collection/', include('collection.urls')),
    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,
        }),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.STATIC_ROOT,
        }),
)

settings.py

...
MEDIA_ROOT = '/Users/me/projectdir/media/'
MEDIA_URL = 'media/'

STATIC_ROOT = '/Users/me/projectdir/static/'
STATIC_URL = 'static/'
...

template (base.html)

<!DOCTYPE html>
<html lang='en-us'>
<head>
<title>Mysite</title>

{% load static %}
{% block links %}
    <link href="{% static 'css/bootswatch-simplex.css' %}" rel="stylesheet" type="text/css">
    <link href="{% static 'css/custom.css' %}" rel="stylesheet" type="text/css">
    <link rel="shortcut icon" href="{% static "favicon.ico" %}">
{% endblock %}

<script src="{% static "lib/bootstrap-3.1.1-dist/js/bootstrap.js" %}"></script>
<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
</head>
...

Django is serving my admin OK, just without static files: CSS, JS, etc.

Static files for my public-facing pages work fine.

If I change STATIC_URL to '/static/', then the opposite is true: the admin is fine, but my public pages lose their static files.

Here's the weirdest part. If I "view source" of my admin pages in my browser, it shows the correct URL for static pages, for example:

/static/admin/css/base.css

But if I actually follow the link, it changes it to this:

http://localhost:8000/admin/static/admin/css/base.css

I think it's checking for static files relative to localhost:8000/admin/static/ instead of just localhost:8000/static/. It adds an extra "admin" level to the url, like static is part of the domain. I just can't figure out how to get rid of it.

I have tried collectstatic, but it doesn't help. The static files are in my static directory, they're just not being served. I can type in, say, http://localhost:8000/static/admin/css/base.css and I get the right CSS file (in plaintext). The files are there. I bet something is wrong with my configuration.

I've emptied my caches, restarted my dev server, etc. No beans.

ideas?



Solution 1:[1]

Use django-admin.py collectstatic or go to ~/django/contrib/admin/static and copy the admin folder(which contains the static files) and paste them into your project's static directory.

**EDIT**

A desperate or clumsy solution you can try for: change your STATIC_URL to '/static/', as from question I saw this:

If I change STATIC_URL to '/static/', then the opposite is true: the admin is fine, but my public pages lose their static files.

Then check with inspect element/firebug, see what urls are being served in public pages. Probably a '/' missing or added a '/'. Adjust it, and see if it works.

Solution 2:[2]

I faced the same issue for two times. The way i solved it was by pasting the static files of admin into static folder mentioned in the code -

cp -r /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin /home/ec2-user/mywork-Deployment/mywork/static

This one definitely works and saves a lot of time and troubles. Hope it helps!

Solution 3:[3]

If it helps anyone, I will share what the issue was with my code. Probably my stupid mistake but may save someone's time:

So, basically. my settings.py variables were something like this:

AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com/"
STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"

I inspected the admin page css src tags and found out the URLs were like this: (Notice two forward slashes in the URL)
https://bucket-name.s3.amazonaws.com//admin/css/login.css.

So I changed my variables slightly and everything loaded fine.

AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com"
STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"

That corrected the faulty URLs and static files loaded perfectly.

Solution 4:[4]

The way that worked out for me was I referenced the static admin files in my settings.py file. I hope this helps someone :)

'./static/admin/', 

Solution 5:[5]

First You need to try:python manage.py collectstatic then u got any errors just follow these steps

step1 **Remove these code from you**r settings.py

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/home/uour project/src/project name/static/',
)  //remove these lines

step2

Replace with it replace with these codes

STATIC_ROOT = os.path.join(BASE_DIR, 'static') //add these line

step3 open terminal and type:python manage.py collectstatic

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Abhay
Solution 3 Hammad
Solution 4 Abhay
Solution 5