Django的静态文件功能允许您指定某些目录以“收集”到面向公众的文件夹中。这很好,但有没有办法获得更细粒度的控制而不仅仅是拥有某些文件夹?例如,无论如何都要指定......
例如,我想说“收集这一个文件夹中的所有文件,除了这个文件和这个目录”。或者,如果我可以选择特定文件,然后选择那个目录的所有子目录(除了我不想要的那个),我可以完成同样的事情。
有可能吗?
答案 0 :(得分:3)
我写了一个自定义的django-admin命令来启用COLLECT_STATIC_IGNORE
设置。
首先在任何app文件夹中创建以下结构:
appname/
management/
__init__.py
commands/
__init__.py
_private.py
collectstatic.py
在collectstatic.py中:
from django.contrib.staticfiles.management.commands.collectstatic import Command
from django.conf import settings
class Command(Command):
def set_options(self, **options):
"""
Set instance variables based on an options dict
"""
self.interactive = options['interactive']
self.verbosity = int(options.get('verbosity', 1))
self.symlink = options['link']
self.clear = options['clear']
self.dry_run = options['dry_run']
ignore_patterns = options['ignore_patterns']
if options['use_default_ignore_patterns']:
ignore_patterns += ['CVS', '.*', '*~']
ignore_patterns += settings.COLLECT_STATIC_IGNORE # Added.
self.ignore_patterns = list(set(ignore_patterns))
self.post_process = options['post_process']
或者,甚至更好,就像@CantucciHQ建议的那样,使用super:
class Command(Command):
def set_options(self, **options):
super(Command, self).set_options(**options)
self.ignore_patterns += settings.COLLECT_STATIC_IGNORE
self.ignore_patterns = list(set(self.ignore_patterns))
这将覆盖de build-in set_options
命令中的collectstatic
函数。
在settings.py中添加COLLECT_STATIC_IGNORE
。
此示例忽略scss文件和管理文件夹中的所有文件。
COLLECT_STATIC_IGNORE = ['*.scss', 'admin', ... ]
然后:
python manage.py collectstatic
标志有效,因此在向COLLECT_STATIC_IGNORE
添加内容后,您可能希望在尝试复制或链接原始文件之前使用--clear
清除现有文件。
python manage.py collectstatic --clear