smack
smack

Reputation: 950

Django Static Url Error, Not Loading

I'm currently mad at Django (1.9) right now! The saddest thing is 'Static URL' is the one giving me problem. 'Media URL' is working fine, no problem, but the static url is giving a huge headache.

in my settings_dev.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))  
STATIC_ROOT = os.path.join(PROJECT_PATH,'../static/')
STATIC_URL = '/static/'

when I add the below tag:

{% load static from staticfiles %}

  <script type="text/javascript" src="{% static 'datepicker/js/bootstrap-datepicker.js' %}"></script>

The js file won't load. when I check my source code, it will display the below link.

   <script type="text/javascript" src="/static/datepicker/js/bootstrap-datepicker.js"></script>

And when I click it will redirect me to

  http://127.0.0.1:8000/static/datepicker/js/bootstrap-datepicker.js

And display

  Page not found (404)
  Request Method:   GET
  Request URL:  http://127.0.0.1:8000/static/datepicker/js/bootstrap-  datepicker.js

Now, I adjusted my urls.py to

if settings_dev.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {
    'document_root': settings_dev.MEDIA_ROOT, 'show_indexes': True}),
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {
    'document_root': settings_dev.STATIC_ROOT, 'show_indexes': True}),
 )

Yet, I'm still getting the same error!! Page not found issues.

Project Directory

PROJECT NAME: Book/

SUB DIRECTORY: 
  media
  static
  Template
  book
  bookapp
  manage.py (this is a file)

What am I missing?

Upvotes: 0

Views: 2485

Answers (2)

Ankush Raghuvanshi
Ankush Raghuvanshi

Reputation: 1442

Okay to make things clear for you.

STATIC_ROOT is that directory where all your static data gets collected when you want to serve your files on another server, say APACHE or NGINX or maybe on Heroku or so.

If don't want just want to run your web-app on your local development server, you don't require python manage.py collectstatic and hence you don't need STATIC_ROOT.

All you need is STATIC_URL and in case you have your static files at some other location as well then you also need STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),].

So you'll be having a folder named `static' at the base directory level where django will look for your static files.

If you specify the same folder for STATIC_DIRS and STATIC_ROOT then you'll automatically get an error. Django won't allow you to do that as technically you are trying to give the same directory for two different purposes.

See this for a detailed explanation -> Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT

Upvotes: 3

Raja Simon
Raja Simon

Reputation: 10305

STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]

That line is enough for serving your project static folder files... And you have to set this in your urls.py

urlpatterns = [
    ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

Upvotes: 1

Related Questions