22

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 = ()
ChrisGPT was on strike
  • 127,765
  • 105
  • 273
  • 257
Meir
  • 1,943
  • 5
  • 22
  • 38

2 Answers2

27

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.

Caumons
  • 9,341
  • 14
  • 68
  • 82
Meir
  • 1,943
  • 5
  • 22
  • 38
  • 3
    To clarify, in settings.py make sure DEBUG is set to true, then in urls.py add the urls.py code above. – Grant Eagon Feb 15 '15 at 17:14
  • I only had to point STATICFILES_DIRS to my (source) static file dirs. After that, running collectstatic collected the files, and after that runserver would serve them. Thanks for the hint :) – Raoul May 25 '15 at 11:22
  • 4
    This has already been included by default in the [`django.contrib.staticfiles.urls`](https://github.com/django/django/blob/master/django/contrib/staticfiles/urls.py) – Yeo Jul 01 '15 at 03:40
10

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

Zeno
  • 331
  • 2
  • 5