代码之家  ›  专栏  ›  技术社区  ›  machineghost

Django静态文件:任何获得更细粒度控制的方法?

  •  4
  • machineghost  · 技术社区  · 12 年前

    Django的静态文件功能允许您指定要“收集”到公共文件夹中的特定目录。这很好,但有没有比拥有某些文件夹更细粒度控制的方法?例如,是否仍要指定。。。

    • 包括特定文件
    • 排除特定文件
    • 排除特定子目录

    例如,我想说“收集这个文件夹中的所有文件,除了这个文件和这个目录”。或者,如果我可以选择特定的文件,然后选择该目录的所有子目录(除了我不想要的目录),我也可以完成同样的任务。

    这些都有可能吗?

    1 回复  |  直到 12 年前
        1
  •  3
  •   Nils Dmitriy Kuznetsov    3 年前

    我编写了一个自定义django admin命令,以启用 COLLECT_STATIC_IGNORE 背景

    首先在任何应用程序文件夹中创建以下结构:

    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']
    

    或者,根据建议,使用 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))
    

    这将覆盖 set_options 内置的函数 collectstatic 命令

    在settings.py中添加 集合_静态_忽略 . 此示例忽略scs文件和管理文件夹中的所有文件。

    COLLECT_STATIC_IGNORE = ['*.scss', 'admin', ... ] 
    

    然后:

    python manage.py collectstatic
    

    标记在添加内容到 集合_静态_忽略 您可能想使用 --clear 在尝试复制或链接原始文件之前清除现有文件。

    python manage.py collectstatic --clear