mirror of https://github.com/django/django.git
Fixed #15094 - Added check for forgetting trailing comma in STATICFILES_DIRS tuple. Also reorganized staticfiles settings-checks for better consistency.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15386 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
74d485c4ec
commit
7aad3d3fa8
|
@ -46,11 +46,19 @@ class FileSystemFinder(BaseFinder):
|
||||||
self.storages = SortedDict()
|
self.storages = SortedDict()
|
||||||
# Set of locations with static files
|
# Set of locations with static files
|
||||||
self.locations = set()
|
self.locations = set()
|
||||||
|
if not isinstance(settings.STATICFILES_DIRS, (list, tuple)):
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
"Your STATICFILES_DIRS setting is not a tuple or list; "
|
||||||
|
"perhaps you forgot a trailing comma?")
|
||||||
for root in settings.STATICFILES_DIRS:
|
for root in settings.STATICFILES_DIRS:
|
||||||
if isinstance(root, (list, tuple)):
|
if isinstance(root, (list, tuple)):
|
||||||
prefix, root = root
|
prefix, root = root
|
||||||
else:
|
else:
|
||||||
prefix = ''
|
prefix = ''
|
||||||
|
if os.path.abspath(settings.STATIC_ROOT) == os.path.abspath(root):
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
"The STATICFILES_DIRS setting should "
|
||||||
|
"not contain the STATIC_ROOT setting")
|
||||||
self.locations.add((prefix, root))
|
self.locations.add((prefix, root))
|
||||||
# Don't initialize multiple storages for the same location
|
# Don't initialize multiple storages for the same location
|
||||||
for prefix, root in self.locations:
|
for prefix, root in self.locations:
|
||||||
|
|
|
@ -26,12 +26,7 @@ class StaticFilesHandler(WSGIHandler):
|
||||||
return settings.STATIC_ROOT
|
return settings.STATIC_ROOT
|
||||||
|
|
||||||
def get_base_url(self):
|
def get_base_url(self):
|
||||||
if not settings.STATIC_URL:
|
utils.check_settings()
|
||||||
raise ImproperlyConfigured("You're using the staticfiles app "
|
|
||||||
"without having set the STATIC_URL setting. Set it to "
|
|
||||||
"URL that handles the files served from STATIC_ROOT.")
|
|
||||||
if settings.DEBUG:
|
|
||||||
utils.check_settings()
|
|
||||||
return settings.STATIC_URL
|
return settings.STATIC_URL
|
||||||
|
|
||||||
def _should_handle(self, path):
|
def _should_handle(self, path):
|
||||||
|
|
|
@ -10,7 +10,7 @@ from django.contrib.staticfiles import utils
|
||||||
class StaticFilesStorage(FileSystemStorage):
|
class StaticFilesStorage(FileSystemStorage):
|
||||||
"""
|
"""
|
||||||
Standard file system storage for static files.
|
Standard file system storage for static files.
|
||||||
|
|
||||||
The defaults for ``location`` and ``base_url`` are
|
The defaults for ``location`` and ``base_url`` are
|
||||||
``STATIC_ROOT`` and ``STATIC_URL``.
|
``STATIC_ROOT`` and ``STATIC_URL``.
|
||||||
"""
|
"""
|
||||||
|
@ -28,8 +28,7 @@ class StaticFilesStorage(FileSystemStorage):
|
||||||
raise ImproperlyConfigured("You're using the staticfiles app "
|
raise ImproperlyConfigured("You're using the staticfiles app "
|
||||||
"without having set the STATIC_URL setting. Set it to "
|
"without having set the STATIC_URL setting. Set it to "
|
||||||
"URL that handles the files served from STATIC_ROOT.")
|
"URL that handles the files served from STATIC_ROOT.")
|
||||||
if settings.DEBUG:
|
utils.check_settings()
|
||||||
utils.check_settings()
|
|
||||||
super(StaticFilesStorage, self).__init__(location, base_url, *args, **kwargs)
|
super(StaticFilesStorage, self).__init__(location, base_url, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,13 @@ def get_files(storage, ignore_patterns=[], location=''):
|
||||||
|
|
||||||
def check_settings():
|
def check_settings():
|
||||||
"""
|
"""
|
||||||
Checks if the MEDIA_(ROOT|URL) and STATIC_(ROOT|URL)
|
Checks if the staticfiles settings have sane values.
|
||||||
settings have the same value.
|
|
||||||
"""
|
"""
|
||||||
|
if not settings.STATIC_URL:
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
"You're using the staticfiles app "
|
||||||
|
"without having set the required STATIC_URL setting.")
|
||||||
if settings.MEDIA_URL == settings.STATIC_URL:
|
if settings.MEDIA_URL == settings.STATIC_URL:
|
||||||
raise ImproperlyConfigured("The MEDIA_URL and STATIC_URL "
|
raise ImproperlyConfigured("The MEDIA_URL and STATIC_URL "
|
||||||
"settings must have different values")
|
"settings must have different values")
|
||||||
|
@ -45,10 +49,3 @@ def check_settings():
|
||||||
(settings.MEDIA_ROOT == settings.STATIC_ROOT)):
|
(settings.MEDIA_ROOT == settings.STATIC_ROOT)):
|
||||||
raise ImproperlyConfigured("The MEDIA_ROOT and STATIC_ROOT "
|
raise ImproperlyConfigured("The MEDIA_ROOT and STATIC_ROOT "
|
||||||
"settings must have different values")
|
"settings must have different values")
|
||||||
for path in settings.STATICFILES_DIRS:
|
|
||||||
# in case the item contains a prefix
|
|
||||||
if isinstance(path, (list, tuple)):
|
|
||||||
path = path[1]
|
|
||||||
if os.path.abspath(settings.STATIC_ROOT) == os.path.abspath(path):
|
|
||||||
raise ImproperlyConfigured("The STATICFILES_DIRS setting should "
|
|
||||||
"not contain the STATIC_ROOT setting")
|
|
||||||
|
|
|
@ -10,8 +10,6 @@ from django.contrib.staticfiles import finders, storage
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.db.models.loading import load_app
|
|
||||||
from django.template import Template, Context
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.utils._os import rmtree_errorhandler
|
from django.utils._os import rmtree_errorhandler
|
||||||
|
|
||||||
|
@ -383,7 +381,27 @@ class TestMiscFinder(TestCase):
|
||||||
self.assertTrue(isinstance(finders.get_finder(
|
self.assertTrue(isinstance(finders.get_finder(
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder'),
|
'django.contrib.staticfiles.finders.FileSystemFinder'),
|
||||||
finders.FileSystemFinder))
|
finders.FileSystemFinder))
|
||||||
|
|
||||||
|
def test_get_finder_bad_classname(self):
|
||||||
self.assertRaises(ImproperlyConfigured,
|
self.assertRaises(ImproperlyConfigured,
|
||||||
finders.get_finder, 'django.contrib.staticfiles.finders.FooBarFinder')
|
finders.get_finder, 'django.contrib.staticfiles.finders.FooBarFinder')
|
||||||
|
|
||||||
|
def test_get_finder_bad_module(self):
|
||||||
self.assertRaises(ImproperlyConfigured,
|
self.assertRaises(ImproperlyConfigured,
|
||||||
finders.get_finder, 'foo.bar.FooBarFinder')
|
finders.get_finder, 'foo.bar.FooBarFinder')
|
||||||
|
|
||||||
|
|
||||||
|
class TestStaticfilesDirsType(TestCase):
|
||||||
|
"""
|
||||||
|
We can't determine if STATICFILES_DIRS is set correctly just by looking at
|
||||||
|
the type, but we can determine if it's definitely wrong.
|
||||||
|
"""
|
||||||
|
def setUp(self):
|
||||||
|
self.old_settings_dir = settings.STATICFILES_DIRS
|
||||||
|
settings.STATICFILES_DIRS = 'a string'
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
settings.STATICFILES_DIRS = self.old_settings_dir
|
||||||
|
|
||||||
|
def test_non_tuple_raises_exception(self):
|
||||||
|
self.assertRaises(ImproperlyConfigured, finders.FileSystemFinder)
|
||||||
|
|
Loading…
Reference in New Issue