Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django runserver not serving static files in development

Tags:

I am using Django with runserver for my development. When I deploy to my production server I can see all my static files, but not on my local computer.

I did collectstatic and I have set DEBUG = True.

I found many different opinions online, the most prominent being the STATICFILES_DIRS, but that does not work for me.

How can I set it so that in my development environment I can see the static files, and when I upload my files to the server I do not need to make any changes for the production environment to work properly.

Edit - my urls.py file:

from django.conf.urls import patterns, include, url from django.conf.urls.static import static import newsflashes import settings  from django.contrib import admin admin.autodiscover()  urlpatterns = patterns('',     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),     url(r'^admin/', include(admin.site.urls)),     url(r'^', include('newsflashes.urls')), ) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

Edit - file structure:

I have two directories, static and dynamic. Inside static are the static files, and in the dynamic directory are the django apps.

Edit - Settings:

My relevant settings are as follows

STATIC_ROOT = os.path.join(BASE_DIR, '..', 'static') STATIC_URL = '/static/' STATICFILES_DIRS = () 
like image 593
Meir Avatar asked Dec 05 '13 11:12

Meir


People also ask

Can Django serve static files in production?

During development, as long as you have DEBUG set to TRUE and you're using the staticfiles app, you can serve up static files using Django's development server. You don't even need to run the collecstatic command.

How do you serve a static file?

To serve static files such as images, CSS files, and JavaScript files, use the express. static built-in middleware function in Express. The root argument specifies the root directory from which to serve static assets.

Where are Django static files stored?

Using the collectstatic command, Django looks for all static files in your apps and collects them wherever you told it to, i.e. the STATIC_ROOT . In our case, we are telling Django that when we run python manage.py collectstatic , gather all static files into a folder called staticfiles in our project root directory.


2 Answers

I managed to fix it.

I created another directory called static in my project folder called static, and copied there my static files.

I then added:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns import settings if settings.DEBUG:     urlpatterns += staticfiles_urlpatterns() 

to my urls.py

and

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

to my settings.py.

Then, when I deploy I execute manage.py collectstatic and since Apache is configured properly, everything will work!

Based on http://dlo.me/archives/2013/01/14/how-to-serve-static-files-django/

Thanks to all.

like image 145
Meir Avatar answered Sep 28 '22 20:09

Meir


I usually run python manage.py runserver --insecure to force serving of static files with the staticfiles app even if the DEBUG setting is False.

Here's the link of their documentation. https://docs.djangoproject.com/en/3.2/ref/contrib/staticfiles/#cmdoption-runserver-insecure

like image 41
Zeno Avatar answered Sep 28 '22 20:09

Zeno