44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
import os
|
|
from django.conf import settings
|
|
from django.contrib.staticfiles.finders import (FileSystemFinder as FileSystemFinderBase,
|
|
AppDirectoriesFinder as AppDirectoriesFinderBase)
|
|
|
|
|
|
class FileSystemFinder(FileSystemFinderBase):
|
|
"""
|
|
In debug mode, serve /static/any/asset.min.ext as /static/any/asset.ext
|
|
"""
|
|
locations = []
|
|
serve_unminimized = getattr(settings, 'DEBUG', False)
|
|
|
|
def find_location(self, root, path, prefix=None):
|
|
if self.serve_unminimized:
|
|
# search for the unminimized version, and if it exists, return it
|
|
base, ext = os.path.splitext(path)
|
|
base, minext = os.path.splitext(base)
|
|
if minext == '.min':
|
|
unminimized_path = super().find_location(root, base + ext, prefix)
|
|
if unminimized_path:
|
|
return unminimized_path
|
|
# otherwise proceed with the given one
|
|
path = super().find_location(root, path, prefix)
|
|
return path
|
|
|
|
|
|
class AppDirectoriesFinder(AppDirectoriesFinderBase):
|
|
serve_unminimized = getattr(settings, 'DEBUG', False)
|
|
|
|
def find_in_app(self, app, path):
|
|
matched_path = super().find_in_app(app, path)
|
|
if matched_path and self.serve_unminimized:
|
|
base, ext = os.path.splitext(matched_path)
|
|
base, minext = os.path.splitext(base)
|
|
if minext == '.min':
|
|
storage = self.storages.get(app, None)
|
|
path = '{}{}'.format(base, ext)
|
|
if storage.exists(path):
|
|
path = storage.path(path)
|
|
if path:
|
|
return path
|
|
return matched_path
|