Nanor
Nanor

Reputation: 2550

Serving static files in development

I've got some static files that are currently serving from Amazon S3. This obviously isn't effective because I can't collectstatic every time I make a minor change. Whenever I'm developing I want to serve from my project where the static files are collected from. The project structure looks partially like this:

myproject
-app
--templates

-myproject
--static
---app
----css
----js
----img

My settings.py looks partially like this:

STATIC_ROOT = 'staticfiles'

MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles')

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

AWS_HEADERS = {
    'Expires': 'Thu, 31 Dec 2099 20:00:00 GMT',
    'Cache-Control': 'max-age=94608000',
}

AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

if DEBUG:
    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
    STATIC_URL = '/static/'
else:
    STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN


STATICFILES_LOCATION = 'static'

MEDIAFILES_LOCATION = 'media'
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION)
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

What I'm trying to achieve is that if I'm running development (when DEBUG would be true) serve static files from the project, rather than fetching from S3.

At the end of my urlpatterns in urls.py I have + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT).

Finally, in my base.html I have:

<!doctype html>
...
  <link rel="stylesheet" href="{% static '/css/normalize.css'%}">

If I'm running with debug=True and I view the source of the page I see <link rel="stylesheet" href="/css/normalize.css"> which isn't where the file is. If I run with debug=False and view the source I get<link rel="stylesheet" href="<AMAZON BUCKET>/css/normalize.css">.

What am I missing to serve locally?

Upvotes: 1

Views: 50

Answers (1)

Andrea Corbellini
Andrea Corbellini

Reputation: 17751

You have to pass a relative path to the static template tag, without the heading slash:

{% static 'css/normalize.css' %}

Upvotes: 1

Related Questions