Django静态文件:有没有办法获得更细粒度的控制?
Django的静态文件特性允许您指定某些目录,以便“收集”到面向公共的文件夹中。这很好,但是有什么方法可以比只使用某些文件夹获得更细粒度的控制吗?例如,是否仍要指定Django静态文件:有没有办法获得更细粒度的控制?,django,Django,Django的静态文件特性允许您指定某些目录,以便“收集”到面向公共的文件夹中。这很好,但是有什么方法可以比只使用某些文件夹获得更细粒度的控制吗?例如,是否仍要指定 包括特定文件 排除特定文件 不包括特定子目录 例如,我想说“收集这个文件夹中的所有文件,除了这个文件和这个目录”。或者,如果我可以选择特定的文件,然后选择该目录的所有子目录(我不想要的子目录除外),我也可以完成同样的事情 有可能吗?我编写了一个自定义的django admin命令来启用收集\u静态\u忽略设置 首先在任何应用程序
- 包括特定文件
- 排除特定文件
- 不包括特定子目录
有可能吗?我编写了一个自定义的django admin命令来启用
收集\u静态\u忽略设置
首先在任何应用程序文件夹中创建以下结构:
appname/
management/
__init__.py
commands/
__init__.py
_private.py
collectstatic.py
在collectstatic.py put中:
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所建议的,使用:
这将覆盖反编译collectstatic
命令中的set\u options
功能
在settings.py中添加COLLECT\u STATIC\u IGNORE
。
此示例忽略scss文件和管理文件夹中的所有文件
COLLECT_STATIC_IGNORE = ['*.scss', 'admin', ... ]
然后:
标记起作用,因此在将某些内容添加到收集\u静态\u忽略
后,您可能希望在尝试复制或链接原始文件之前使用--clear
清除现有文件
python manage.py collectstatic --clear
一些例子是在感谢,这将工作。然而,我们的ops人员希望避免命令行标志,所以理想情况下,我正在寻找一种通过设置、类重写来实现这一点的方法。。。类似的东西。编写一个自定义管理命令来设置标志并调用原始命令怎么样?你仍然可以称之为收集静态。。。。或者,您可以编写一个自定义的静态文件查找器,它具有您想要的属性。这将更加灵活。我从来没做过,但看起来不难。如果你需要帮助,我可以试着帮你。看起来是个有趣的问题。django似乎也应该改进这一点——它目前硬连接到文件模式CVS、~、。默认情况下。这是我的第一个django管理命令,因此非常感谢您的反馈!干得好!一个建议——调用祖先的set_选项,然后执行自定义操作(设置ignore_模式)。e、 g.super(命令,自我)。设置选项(**选项)
。这样,您就不必重复基本功能,并且在将来的版本中自动获得新功能。您可能需要更改命令类名b/c您正在覆盖祖先的名称。@CantucciHQ:我对super了解得不够,所以没有信心。你能看一下吗?不更名似乎效果不错。谢谢你的提示。
python manage.py collectstatic
python manage.py collectstatic --clear