2010-10-20 09:33:24 +08:00
|
|
|
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):
|
|
|
|
"""
|
2011-01-05 20:41:40 +08:00
|
|
|
Standard file system storage for static files.
|
2011-02-01 22:57:10 +08:00
|
|
|
|
2010-10-20 09:33:24 +08:00
|
|
|
The defaults for ``location`` and ``base_url`` are
|
2010-11-17 23:36:26 +08:00
|
|
|
``STATIC_ROOT`` and ``STATIC_URL``.
|
2010-10-20 09:33:24 +08:00
|
|
|
"""
|
|
|
|
def __init__(self, location=None, base_url=None, *args, **kwargs):
|
|
|
|
if location is None:
|
2010-11-17 23:36:26 +08:00
|
|
|
location = settings.STATIC_ROOT
|
2010-10-20 09:33:24 +08:00
|
|
|
if base_url is None:
|
2010-11-17 23:36:26 +08:00
|
|
|
base_url = settings.STATIC_URL
|
2010-10-20 09:33:24 +08:00
|
|
|
if not location:
|
|
|
|
raise ImproperlyConfigured("You're using the staticfiles app "
|
2010-11-17 23:36:26 +08:00
|
|
|
"without having set the STATIC_ROOT setting. Set it to "
|
2011-01-05 20:41:40 +08:00
|
|
|
"the absolute path of the directory that holds static files.")
|
2010-11-17 23:36:26 +08:00
|
|
|
# check for None since we might use a root URL (``/``)
|
|
|
|
if base_url is None:
|
2010-10-20 09:33:24 +08:00
|
|
|
raise ImproperlyConfigured("You're using the staticfiles app "
|
2010-11-17 23:36:26 +08:00
|
|
|
"without having set the STATIC_URL setting. Set it to "
|
|
|
|
"URL that handles the files served from STATIC_ROOT.")
|
2011-02-01 22:57:10 +08:00
|
|
|
utils.check_settings()
|
2010-10-20 09:33:24 +08:00
|
|
|
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.
|
|
|
|
"""
|
2011-01-16 07:38:00 +08:00
|
|
|
prefix = None
|
2010-10-20 09:33:24 +08:00
|
|
|
source_dir = 'static'
|
|
|
|
|
|
|
|
def __init__(self, app, *args, **kwargs):
|
|
|
|
"""
|
|
|
|
Returns a static file storage if available in the given app.
|
|
|
|
"""
|
2011-01-16 07:38:00 +08:00
|
|
|
# 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.
|
2010-10-20 09:33:24 +08:00
|
|
|
if self.app_module == 'django.contrib.admin':
|
2011-01-16 07:38:00 +08:00
|
|
|
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)
|
2010-10-20 09:33:24 +08:00
|
|
|
|