Django: Not Found static/admin/css
Solution 1
You shouldn't change BASE_DIR
In settings.py
edit the value of STATIC_ROOT
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
And run collectstatic
again
Solution 2
You also need to add the static directory to your urls.py
file. Add the following:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Solution 3
I had the same problem and neither of the answers didn't work for me. In this way, I found this solution to deal with that:
I used STATICFILES_DIRS
instead of STATIC_ROOT
and also debug should be turned true:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
DEBUG = True
If you are using a subfolder (i.e. front-end
) for your static files you could use the following procedure:
from unipath import Path
BASE_DIR = Path(__file__).ancestor(2)
# STATIC_ROOT = os.path.join(BASE_DIR.child('front-end'), "static")
STATICFILES_DIRS = [
os.path.join(BASE_DIR.child('front-end'), "static"),
]
DEBUG = True
[NOTE]:
- Django 2.2
- Python 3.6
Solution 4
Django does not serve static files in production. Normally, To serve Django static files in production you need to setup a standalone server e.g. nginx.
However, the way to serve static files in Heroku is a little different. See the link below, provided by Heroku team, for details on how to serve static files in Heroku:
https://devcenter.heroku.com/articles/django-assets
EDIT: making the answer conform to stackoverflow guidelines:
as per the Heroku guidelines to serve static files:
add in settings.py:
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
then install WhiteNoise project with the following command:
$ pip install whitenoise
and in your wsgi.py:
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
Related videos on Youtube
Admin
Updated on July 18, 2021Comments
-
Admin almost 3 years
I just deployed my first Django app on Heroku but I notice that it doesn't have any CSS like when I runserver on the local machine. I know there's something wrong with static files but I don't understand much about it even when I already read the docs. I can do
python3 manage.py collectstatic
to create a static folder but I don't know where to put it and how to change the DIRS in settings.py. I really need some help to get rid of it.
settings.py:
DEBUG = True INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'household_management', ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] STATIC_ROOT = 'static' STATIC_URL = '/static/'
heroku logs:
2016-09-02T10:42:09.461124+00:00 heroku[router]: at=info method=GET path="/" host=peaceful-earth-63194.herokuapp.com request_id=33fc071d-344c-47e7-8721-919ba6d5df65 fwd="14.191.217.103" dyno=web.1 connect=2ms service=53ms status=302 bytes=400 2016-09-02T10:42:09.760323+00:00 heroku[router]: at=info method=GET path="/admin/login/?next=/" host=peaceful-earth-63194.herokuapp.com request_id=c050edcd-02d9-4c39-88ba-8a16be692843 fwd="14.191.217.103" dyno=web.1 connect=1ms service=45ms status=200 bytes=2184 2016-09-02T10:42:10.037370+00:00 heroku[router]: at=info method=GET path="/static/admin/css/login.css" host=peaceful-earth-63194.herokuapp.com request_id=ec43016a-09b7-499f-a84b-b8024577b717 fwd="14.191.217.103" dyno=web.1 connect=2ms service=9ms status=404 bytes=4569 2016-09-02T10:42:10.047224+00:00 heroku[router]: at=info method=GET path="/static/admin/css/base.css" host=peaceful-earth-63194.herokuapp.com request_id=6570ee02-3b78-44f4-9ab9-0e80b706ea40 fwd="14.191.217.103" dyno=web.1 connect=1ms service=16ms status=404 bytes=4566 2016-09-02T10:42:10.030726+00:00 app[web.1]: Not Found: /static/admin/css/login.css 2016-09-02T10:42:10.043743+00:00 app[web.1]: Not Found: /static/admin/css/base.css 2016-09-02T10:48:56.593180+00:00 heroku[api]: Deploy d1d39dc by [email protected] 2016-09-02T10:48:56.593290+00:00 heroku[api]: Release v21 created by [email protected] 2016-09-02T10:48:56.803122+00:00 heroku[slug-compiler]: Slug compilation started 2016-09-02T10:48:56.803127+00:00 heroku[slug-compiler]: Slug compilation finished 2016-09-02T10:48:56.893962+00:00 heroku[web.1]: Restarting 2016-09-02T10:48:56.894722+00:00 heroku[web.1]: State changed from up to starting 2016-09-02T10:48:59.681267+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2016-09-02T10:49:00.418357+00:00 app[web.1]: [2016-09-02 17:49:00 +0000] [9] [INFO] Worker exiting (pid: 9) 2016-09-02T10:49:00.418377+00:00 app[web.1]: [2016-09-02 17:49:00 +0000] [10] [INFO] Worker exiting (pid: 10) 2016-09-02T10:49:00.418393+00:00 app[web.1]: [2016-09-02 10:49:00 +0000] [3] [INFO] Handling signal: term 2016-09-02T10:49:00.477684+00:00 app[web.1]: [2016-09-02 10:49:00 +0000] [3] [INFO] Shutting down: Master 2016-09-02T10:49:00.594623+00:00 heroku[web.1]: Process exited with status 0 2016-09-02T10:49:00.607775+00:00 heroku[web.1]: Starting process with command `gunicorn assignment.wsgi --log-file -` 2016-09-02T10:49:02.911936+00:00 app[web.1]: [2016-09-02 10:49:02 +0000] [3] [INFO] Starting gunicorn 19.6.0 2016-09-02T10:49:02.912529+00:00 app[web.1]: [2016-09-02 10:49:02 +0000] [3] [INFO] Listening at: http://0.0.0.0:18162 (3) 2016-09-02T10:49:02.917427+00:00 app[web.1]: [2016-09-02 10:49:02 +0000] [9] [INFO] Booting worker with pid: 9 2016-09-02T10:49:02.912655+00:00 app[web.1]: [2016-09-02 10:49:02 +0000] [3] [INFO] Using worker: sync 2016-09-02T10:49:02.980208+00:00 app[web.1]: [2016-09-02 10:49:02 +0000] [10] [INFO] Booting worker with pid: 10 2016-09-02T10:49:04.228057+00:00 heroku[web.1]: State changed from starting to up 2016-09-02T10:53:41.572630+00:00 heroku[router]: at=info method=GET path="/" host=peaceful-earth-63194.herokuapp.com request_id=68c0b216-2084-46c8-9be5-b7e5aacaa590 fwd="14.191.217.103" dyno=web.1 connect=0ms service=42ms status=302 bytes=400 2016-09-02T10:53:41.880217+00:00 heroku[router]: at=info method=GET path="/admin/login/?next=/" host=peaceful-earth-63194.herokuapp.com request_id=17b91dc2-ba06-482c-8af0-e7b015fe2077 fwd="14.191.217.103" dyno=web.1 connect=0ms service=41ms status=200 bytes=2184 2016-09-02T10:53:42.156295+00:00 heroku[router]: at=info method=GET path="/static/admin/css/base.css" host=peaceful-earth-63194.herokuapp.com request_id=40dec62d-8c4a-4af6-8e0f-8053fe8379b9 fwd="14.191.217.103" dyno=web.1 connect=0ms service=9ms status=404 bytes=4566 2016-09-02T10:53:42.157491+00:00 heroku[router]: at=info method=GET path="/static/admin/css/login.css" host=peaceful-earth-63194.herokuapp.com request_id=3a29f200-c185-4344-a6e1-5af35e5d120e fwd="14.191.217.103" dyno=web.1 connect=0ms service=17ms status=404 bytes=4569 2016-09-02T10:53:42.164162+00:00 app[web.1]: Not Found: /static/admin/css/base.css 2016-09-02T10:53:42.177480+00:00 app[web.1]: Not Found: /static/admin/css/login.css 2016-09-02T11:01:19.031353+00:00 heroku[api]: Deploy 2beb15a by [email protected] 2016-09-02T11:01:19.031444+00:00 heroku[api]: Release v22 created by [email protected] 2016-09-02T11:01:19.262522+00:00 heroku[slug-compiler]: Slug compilation started 2016-09-02T11:01:19.262528+00:00 heroku[slug-compiler]: Slug compilation finished 2016-09-02T11:01:19.426837+00:00 heroku[web.1]: Restarting 2016-09-02T11:01:19.427455+00:00 heroku[web.1]: State changed from up to starting 2016-09-02T11:01:22.141325+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2016-09-02T11:01:22.545379+00:00 heroku[web.1]: Starting process with command `gunicorn assignment.wsgi --log-file -` 2016-09-02T11:01:22.754067+00:00 app[web.1]: [2016-09-02 18:01:22 +0000] [9] [INFO] Worker exiting (pid: 9) 2016-09-02T11:01:22.754077+00:00 app[web.1]: [2016-09-02 18:01:22 +0000] [10] [INFO] Worker exiting (pid: 10) 2016-09-02T11:01:22.757599+00:00 app[web.1]: [2016-09-02 11:01:22 +0000] [3] [INFO] Handling signal: term 2016-09-02T11:01:22.763197+00:00 app[web.1]: [2016-09-02 11:01:22 +0000] [3] [INFO] Shutting down: Master 2016-09-02T11:01:22.880977+00:00 heroku[web.1]: Process exited with status 0 2016-09-02T11:01:24.628348+00:00 app[web.1]: [2016-09-02 11:01:24 +0000] [3] [INFO] Starting gunicorn 19.6.0 2016-09-02T11:01:24.628921+00:00 app[web.1]: [2016-09-02 11:01:24 +0000] [3] [INFO] Listening at: http://0.0.0.0:34235 (3) 2016-09-02T11:01:24.629075+00:00 app[web.1]: [2016-09-02 11:01:24 +0000] [3] [INFO] Using worker: sync 2016-09-02T11:01:24.636198+00:00 app[web.1]: [2016-09-02 11:01:24 +0000] [9] [INFO] Booting worker with pid: 9 2016-09-02T11:01:24.722355+00:00 app[web.1]: [2016-09-02 11:01:24 +0000] [10] [INFO] Booting worker with pid: 10 2016-09-02T11:01:26.271435+00:00 heroku[web.1]: State changed from starting to up 2016-09-02T11:01:27.930795+00:00 heroku[router]: at=info method=GET path="/" host=peaceful-earth-63194.herokuapp.com request_id=a844ef4b-a2d1-44fe-af0e-09c76cb0e034 fwd="14.191.217.103" dyno=web.1 connect=0ms service=46ms status=302 bytes=400 2016-09-02T11:01:28.363163+00:00 heroku[router]: at=info method=GET path="/admin/login/?next=/" host=peaceful-earth-63194.herokuapp.com request_id=31c0823a-466f-4363-b550-3c81681305f5 fwd="14.191.217.103" dyno=web.1 connect=0ms service=171ms status=200 bytes=2184 2016-09-02T11:01:28.716801+00:00 heroku[router]: at=info method=GET path="/static/admin/css/base.css" host=peaceful-earth-63194.herokuapp.com request_id=2d1b8bb2-9ab3-49f7-b557-a54eed996547 fwd="14.191.217.103" dyno=web.1 connect=0ms service=8ms status=404 bytes=4566 2016-09-02T11:01:28.693936+00:00 heroku[router]: at=info method=GET path="/static/admin/css/login.css" host=peaceful-earth-63194.herokuapp.com request_id=24aa1eed-aa87-4854-ab35-1604e8393b9d fwd="14.191.217.103" dyno=web.1 connect=0ms service=18ms status=404 bytes=4569 2016-09-02T11:01:28.681948+00:00 app[web.1]: Not Found: /static/admin/css/base.css 2016-09-02T11:01:28.692958+00:00 app[web.1]: Not Found: /static/admin/css/login.css 2016-09-02T11:12:43.686922+00:00 heroku[api]: Deploy 63085e6 by [email protected] 2016-09-02T11:12:43.687037+00:00 heroku[api]: Release v23 created by [email protected] 2016-09-02T11:12:43.951987+00:00 heroku[slug-compiler]: Slug compilation started 2016-09-02T11:12:43.951998+00:00 heroku[slug-compiler]: Slug compilation finished 2016-09-02T11:12:43.926959+00:00 heroku[web.1]: Restarting 2016-09-02T11:12:43.929107+00:00 heroku[web.1]: State changed from up to starting 2016-09-02T11:12:46.931285+00:00 heroku[web.1]: Starting process with command `gunicorn assignment.wsgi --log-file -` 2016-09-02T11:12:47.860591+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2016-09-02T11:12:48.729601+00:00 app[web.1]: [2016-09-02 18:12:48 +0000] [10] [INFO] Worker exiting (pid: 10) 2016-09-02T11:12:48.729617+00:00 app[web.1]: [2016-09-02 18:12:48 +0000] [9] [INFO] Worker exiting (pid: 9) 2016-09-02T11:12:48.729623+00:00 app[web.1]: [2016-09-02 11:12:48 +0000] [3] [INFO] Handling signal: term 2016-09-02T11:12:48.775112+00:00 app[web.1]: [2016-09-02 11:12:48 +0000] [3] [INFO] Shutting down: Master 2016-09-02T11:12:48.890301+00:00 heroku[web.1]: Process exited with status 0 2016-09-02T11:12:48.839674+00:00 app[web.1]: [2016-09-02 11:12:48 +0000] [3] [INFO] Starting gunicorn 19.6.0 2016-09-02T11:12:48.840093+00:00 app[web.1]: [2016-09-02 11:12:48 +0000] [3] [INFO] Listening at: http://0.0.0.0:20001 (3) 2016-09-02T11:12:48.840166+00:00 app[web.1]: [2016-09-02 11:12:48 +0000] [3] [INFO] Using worker: sync 2016-09-02T11:12:48.843687+00:00 app[web.1]: [2016-09-02 11:12:48 +0000] [9] [INFO] Booting worker with pid: 9 2016-09-02T11:12:48.939210+00:00 app[web.1]: [2016-09-02 11:12:48 +0000] [10] [INFO] Booting worker with pid: 10 2016-09-02T11:12:50.565750+00:00 heroku[web.1]: State changed from starting to up 2016-09-02T11:13:00.439745+00:00 heroku[router]: at=info method=GET path="/" host=peaceful-earth-63194.herokuapp.com request_id=c30b47e6-fbb8-4412-9242-5fe37217026a fwd="14.191.217.103" dyno=web.1 connect=0ms service=49ms status=400 bytes=199 2016-09-02T11:14:01.686661+00:00 heroku[api]: Deploy c149525 by [email protected] 2016-09-02T11:14:01.686965+00:00 heroku[api]: Release v24 created by [email protected] 2016-09-02T11:14:02.189063+00:00 heroku[slug-compiler]: Slug compilation started 2016-09-02T11:14:02.189073+00:00 heroku[slug-compiler]: Slug compilation finished 2016-09-02T11:14:02.466456+00:00 heroku[web.1]: Restarting 2016-09-02T11:14:02.467005+00:00 heroku[web.1]: State changed from up to starting 2016-09-02T11:14:04.713176+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2016-09-02T11:14:05.259388+00:00 app[web.1]: [2016-09-02 18:14:05 +0000] [10] [INFO] Worker exiting (pid: 10) 2016-09-02T11:14:05.260345+00:00 app[web.1]: [2016-09-02 11:14:05 +0000] [3] [INFO] Handling signal: term 2016-09-02T11:14:05.265937+00:00 app[web.1]: [2016-09-02 18:14:05 +0000] [9] [INFO] Worker exiting (pid: 9) 2016-09-02T11:14:05.317647+00:00 app[web.1]: [2016-09-02 11:14:05 +0000] [3] [INFO] Shutting down: Master 2016-09-02T11:14:05.411311+00:00 heroku[web.1]: Process exited with status 0 2016-09-02T11:14:06.581314+00:00 heroku[web.1]: Starting process with command `gunicorn assignment.wsgi --log-file -` 2016-09-02T11:14:10.282506+00:00 heroku[web.1]: State changed from starting to up 2016-09-02T11:14:10.187781+00:00 app[web.1]: [2016-09-02 11:14:10 +0000] [3] [INFO] Starting gunicorn 19.6.0 2016-09-02T11:14:10.188490+00:00 app[web.1]: [2016-09-02 11:14:10 +0000] [3] [INFO] Listening at: http://0.0.0.0:27446 (3) 2016-09-02T11:14:10.188627+00:00 app[web.1]: [2016-09-02 11:14:10 +0000] [3] [INFO] Using worker: sync 2016-09-02T11:14:10.211822+00:00 app[web.1]: [2016-09-02 11:14:10 +0000] [9] [INFO] Booting worker with pid: 9 2016-09-02T11:14:10.231978+00:00 app[web.1]: [2016-09-02 11:14:10 +0000] [10] [INFO] Booting worker with pid: 10 2016-09-02T11:14:29.714607+00:00 heroku[router]: at=info method=GET path="/" host=peaceful-earth-63194.herokuapp.com request_id=947ed6b9-b48a-48b1-8860-36846248acea fwd="14.191.217.103" dyno=web.1 connect=0ms service=153ms status=302 bytes=400 2016-09-02T11:14:30.522664+00:00 heroku[router]: at=info method=GET path="/admin/login/?next=/" host=peaceful-earth-63194.herokuapp.com request_id=b74c55bf-913c-4e0d-8d16-2b1f4f0cea13 fwd="14.191.217.103" dyno=web.1 connect=0ms service=561ms status=200 bytes=2184 2016-09-02T11:14:30.879732+00:00 heroku[router]: at=info method=GET path="/static/admin/css/base.css" host=peaceful-earth-63194.herokuapp.com request_id=769f989a-f051-4a89-a079-1d6acea3c185 fwd="14.191.217.103" dyno=web.1 connect=0ms service=86ms status=404 bytes=4566 2016-09-02T11:14:30.865971+00:00 heroku[router]: at=info method=GET path="/static/admin/css/login.css" host=peaceful-earth-63194.herokuapp.com request_id=b271b831-a4fb-4bdb-9f6a-e4d66297db88 fwd="14.191.217.103" dyno=web.1 connect=0ms service=75ms status=404 bytes=4569 2016-09-02T11:14:30.865501+00:00 app[web.1]: Not Found: /static/admin/css/login.css 2016-09-02T11:14:30.871110+00:00 app[web.1]: Not Found: /static/admin/css/base.css
-
ham over 7 years
django
doesn't support serving static files in production. Have a look at this: devcenter.heroku.com/articles/django-assets
-
-
Admin over 7 yearsI ran
collectstatic
, now where should I put thestatic
folder in? -
4140tm over 7 yearsYou don't put it anywhere. If the command ran successfully you should have a folder called
static
at your project's root. It should contain your css and js and that's from where these files should be served. You might have to further configure the server or change your templates to serve statics. Check Heroku's docs on the subject as others have suggested -
nico about 4 yearsI had a hard time getting this to work when running from docker. This blog post was extremely helpful for me: testdriven.io/blog/…
-
Benyamin Jafari - aGn almost 4 yearsWhen I add
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
to urlpatterns I encounter with this error:(urls.E004) Your URL pattern [] is invalid. Ensure that urlpatterns is a list of path() and/or re_path() instances.
-
user1847 almost 4 years@BenyaminJafari this means your
urlpatterns
list is empty. Check your syntax and take another stab at it. It appears you are not actually addingstatic(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
to the list. -
Benyamin Jafari - aGn almost 4 yearsNo,
urlpatterns
list is not empty and there isn't any problem in syntax. It meansurlspattern
only supportspath()
andre_path()
notstatic()
. Anyway, my problem was solved through another way. -
user1847 almost 4 years
static()
returns are_path
object :) Source: github.com/django/django/blob/master/django/conf/urls/static.py