/django/contrib/staticfiles/storage.py
Python | 56 lines | 32 code | 7 blank | 17 comment | 5 complexity | 9a1f41fd5b0629cfb56365571d2dc186 MD5 | raw file
Possible License(s): BSD-3-Clause
- import os
- from django.conf import settings
- from django.core.exceptions import ImproperlyConfigured
- from django.core.files.storage import FileSystemStorage
- from django.utils.importlib import import_module
- from django.contrib.staticfiles import utils
- class StaticFilesStorage(FileSystemStorage):
- """
- Standard file system storage for static files.
- The defaults for ``location`` and ``base_url`` are
- ``STATIC_ROOT`` and ``STATIC_URL``.
- """
- def __init__(self, location=None, base_url=None, *args, **kwargs):
- if location is None:
- location = settings.STATIC_ROOT
- if base_url is None:
- base_url = settings.STATIC_URL
- if not location:
- raise ImproperlyConfigured("You're using the staticfiles app "
- "without having set the STATIC_ROOT setting.")
- # check for None since we might use a root URL (``/``)
- if base_url is None:
- raise ImproperlyConfigured("You're using the staticfiles app "
- "without having set the STATIC_URL setting.")
- utils.check_settings()
- super(StaticFilesStorage, self).__init__(location, base_url, *args, **kwargs)
- class AppStaticStorage(FileSystemStorage):
- """
- A file system storage backend that takes an app module and works
- for the ``static`` directory of it.
- """
- prefix = None
- source_dir = 'static'
- def __init__(self, app, *args, **kwargs):
- """
- Returns a static file storage if available in the given app.
- """
- # app is the actual app module
- self.app_module = app
- # We special case the admin app here since it has its static files
- # in 'media' for historic reasons.
- if self.app_module == 'django.contrib.admin':
- self.prefix = 'admin'
- self.source_dir = 'media'
- mod = import_module(self.app_module)
- mod_path = os.path.dirname(mod.__file__)
- location = os.path.join(mod_path, self.source_dir)
- super(AppStaticStorage, self).__init__(location, *args, **kwargs)