Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Rest Framework - Missing Static Directory

I have recently started a Digital Ocean server with a pre-installed Django image on Ubuntu 14.04. I wanted to create an API, and have decided on the Django Rest Framework. I installed the Django Rest Framework exactly according to http://www.django-rest-framework.org/.

Here is what the tutorial site looks like when I access it on my server.

enter image description here

As you can see, it does not look like the site on the rest framework tutorial website. This is because of the fact that when I view the source code of my site, all of the /static/rest_framework/* files give me a 404 error.

Here is my settings.py file in the Django 'django_project' root directory.

""" Django settings for django_project project.  For more information on this file, see https://docs.djangoproject.com/en/1.6/topics/settings/  For the full list of settings and their values, see https://docs.djangoproject.com/en/1.6/ref/settings/ """  # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__))   # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/  # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '7Vnib8zBUEV3LfacGKi2rT185N36A8svyq8azJLvNpv7BxxzMK'  # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True  TEMPLATE_DEBUG = True  ALLOWED_HOSTS = []   # Application definition  INSTALLED_APPS = (     'django.contrib.admin',     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.messages',     'django.contrib.staticfiles',     'rest_framework', )  REST_FRAMEWORK = {     # Use hyperlinked styles by default.     # Only used if the `serializer_class` attribute is not set on a view.     'DEFAULT_MODEL_SERIALIZER_CLASS':         'rest_framework.serializers.HyperlinkedModelSerializer',      # Use Django's standard `django.contrib.auth` permissions,     # or allow read-only access for unauthenticated users.     'DEFAULT_PERMISSION_CLASSES': [         'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'     ] }  MIDDLEWARE_CLASSES = (     'django.contrib.sessions.middleware.SessionMiddleware',     'django.middleware.common.CommonMiddleware',     'django.middleware.csrf.CsrfViewMiddleware',     'django.contrib.auth.middleware.AuthenticationMiddleware',     'django.contrib.messages.middleware.MessageMiddleware',     'django.middleware.clickjacking.XFrameOptionsMiddleware', )  ROOT_URLCONF = 'django_project.urls'  WSGI_APPLICATION = 'django_project.wsgi.application'   # Database # https://docs.djangoproject.com/en/1.6/ref/settings/#databases  DATABASES = {     'default': {         'ENGINE': 'django.db.backends.postgresql_psycopg2',         'NAME': 'django',         'USER': 'django',         'PASSWORD': 'yj4SM6qcP0',         'HOST': 'localhost',         'PORT': '',     } }  # Internationalization # https://docs.djangoproject.com/en/1.6/topics/i18n/  LANGUAGE_CODE = 'en-us'  TIME_ZONE = 'UTC'  USE_I18N = True  USE_L10N = True  USE_TZ = True   # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.6/howto/static-files/  STATIC_URL = '/static/' 

Can anyone help me fix this missing /static/rest_framework/ location error? If I am going to have an API for my application I would like it to be a good looking one.

Let me know if you need anything else to help you fix this, and thank you in advance for your help.

like image 556
BigBerger Avatar asked Aug 19 '14 03:08

BigBerger


2 Answers

First, You need to set static url and static root in django settings.py

STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, "static")  

Then collect all static files

python manage.py collectstatic 
like image 37
Rajiv Sharma Avatar answered Sep 21 '22 11:09

Rajiv Sharma


I have found the solution to my problem!

After much mind boggling research, I re-read this stack overflow question that didn't seem to help me the last time I took a look at it.

My new settings.py in my django_project folder now looks like this.

""" Django settings for django_project project.  For more information on this file, see https://docs.djangoproject.com/en/1.6/topics/settings/  For the full list of settings and their values, see https://docs.djangoproject.com/en/1.6/ref/settings/ """  # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__))   # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/  # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'DwGCDqtcqzzGO2XK87u7bVSEUqHogZRFl4UdhkcCudSHxLUVvx'  # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True  TEMPLATE_DEBUG = True  ALLOWED_HOSTS = ['*']   # Application definition  INSTALLED_APPS = (     'django.contrib.admin',     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.messages',     'django.contrib.staticfiles',     'rest_framework', )  REST_FRAMEWORK = {     # Use hyperlinked styles by default.     # Only used if the `serializer_class` attribute is not set on a view.     'DEFAULT_MODEL_SERIALIZER_CLASS':         'rest_framework.serializers.HyperlinkedModelSerializer',      # Use Django's standard `django.contrib.auth` permissions,     # or allow read-only access for unauthenticated users.     'DEFAULT_PERMISSION_CLASSES': [         'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'     ] }  MIDDLEWARE_CLASSES = (     'django.contrib.sessions.middleware.SessionMiddleware',     'django.middleware.common.CommonMiddleware',     'django.middleware.csrf.CsrfViewMiddleware',     'django.contrib.auth.middleware.AuthenticationMiddleware',     'django.contrib.messages.middleware.MessageMiddleware',     'django.middleware.clickjacking.XFrameOptionsMiddleware', )  ROOT_URLCONF = 'django_project.urls'  WSGI_APPLICATION = 'django_project.wsgi.application'   # Database # https://docs.djangoproject.com/en/1.6/ref/settings/#databases  DATABASES = {     'default': {         'ENGINE': 'django.db.backends.postgresql_psycopg2',         'NAME': 'django',         'USER': 'django',         'PASSWORD': 'mpOQzpYFci',         'HOST': 'localhost',         'PORT': '',     } }  # Internationalization # https://docs.djangoproject.com/en/1.6/topics/i18n/  LANGUAGE_CODE = 'en-us'  TIME_ZONE = 'UTC'  USE_I18N = True  USE_L10N = True  USE_TZ = True   # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.6/howto/static-files/  STATIC_ROOT = '/home/django/django_project/django_project/static' STATIC_URL = '/static/'  STATICFILES_DIRS = (     os.path.join(BASE_DIR, 'static'), ) 

I now have a folder named 'static' right next to my settings.py file in my django_project folder with all necessary resources such as 'rest_framework' and 'admin'. I restarted gunicorn after this change and reloaded my web page and it worked!

Thanks to those of you who tried to help, you did lead me in the right direction and probably made this go by a lot faster.

like image 188
BigBerger Avatar answered Sep 21 '22 11:09

BigBerger