import os from django.contrib.staticfiles import utils from django.contrib.staticfiles.finders import FileSystemFinder from django.core.files.storage import FileSystemStorage from staticfiles.apps import GENERATED_ROOT, IGNORE_PATTERNS_BUNDLED class GeneratedFilesFinder(FileSystemFinder): """Find generated and regular static files""" def __init__(self, app_names=None, *args, **kwargs): super().__init__(*args, **kwargs) # Add GENERATED_ROOT after adding everything in settings.STATICFILES_DIRS self.locations.append(("", GENERATED_ROOT)) generated_storage = FileSystemStorage(location=GENERATED_ROOT) generated_storage.prefix = "" self.storages[GENERATED_ROOT] = generated_storage def list(self, ignore_patterns: list[str]): # List all files availables for _, root in self.locations: # Skip nonexistent directories. if not os.path.isdir(root): continue ignored = ignore_patterns # We don't want to ignore bundled files in the generated folder if root == GENERATED_ROOT: ignored = list(set(ignored) - set(IGNORE_PATTERNS_BUNDLED)) storage = self.storages[root] for path in utils.get_files(storage, ignored): yield path, storage