有没有比这更好的方法来为多个应用程序加载 Django 静态目录?谢谢

Is there a better way to load Django static directories for multiple apps than this? Thank you

我目前在 settings.py 中有以下内容:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

#add app-specific static directory
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'project/static'),
    os.path.join(BASE_DIR, 'project/apps/blog/static/'),
    os.path.join(BASE_DIR, 'project/apps/users/static/'),
    os.path.join(BASE_DIR, 'project/apps/comments/static/'),
    os.path.join(BASE_DIR, 'project/apps/categories/static/'),
)

我应该在一行中完成吗?非常感谢。

您可以添加自定义静态文件查找器来对您进行分类,但通常如果您在应用程序中有 /static 文件夹,它应该被

发现
django.contrib.staticfiles.finders.AppDirectoriesFinder

作为documented

The default will find files stored in the STATICFILES_DIRS setting (using django.contrib.staticfiles.finders.FileSystemFinder) and in a static subdirectory of each app (using django.contrib.staticfiles.finders.AppDirectoriesFinder). If multiple files with the same name are present, the first file that is found will be used

Source

更好的做法是将所有静态文件放在根目录的同一个文件夹中,而不是每个应用程序:

# ...
├── app1
├── app2
├── project
├── manage.py
├── media
├── requirements.txt
├── static
│   ├── css
│   ├── icons
│   ├── img
│   ├── js
│   └── vendor

然后在你的settings.py中分配这个变量:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

staticfiles_dirs 设置目录并告诉 Django 在哪里查找你的静态文件,在这个例子中,我们的文件夹在我们的根目录中被命名为 'static',os.path.join 将加入static.

的基本目录(root)

BTW STATIC_ROOT 通常用于生产环境,当您 运行 'collectstatic` 命令时,所有静态文件包括您的第 3 方应用程序将被复制到此 'staticfiles' 文件夹.

另外,您也可以将各个应用的模板放到同一个文件夹中,方法类似:

# root 
└── templates
    ├── app1
    ├── app2
    ├── app3
    ├── base.html
    └── index.html

然后在您的 settings.py 中添加 'templates' 文件夹的目录。


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': { # ...
            ],
        },
    },
]

就我个人而言,我认为这样会更干净。

文件结构可以参考我的项目: here