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

问题描述

我目前在 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/'),'project/apps/users/static/'),'project/apps/comments/static/'),'project/apps/categories/static/'),)

我应该在一行中做这件事吗?非常感谢。

解决方法

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

django.contrib.staticfiles.finders.AppDirectoriesFinder

作为documented

默认将查找存储在 STATICFILES_DIRS 设置中的文件 (使用 django.contrib.staticfiles.finders.FileSystemFinder)并在一个 每个应用程序的静态子目录(使用 django.contrib.staticfiles.finders.AppDirectoriesFinder)。如果多个 存在同名文件,找到的第一个文件将是 用过

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 将加入基本目录( root) 和 static

顺便说一句,STATIC_ROOT 通常用于生产环境,当您运行“collectstatic”命令时,所有静态文件,包括您的 3rd 方应用程序,都会被复制到这个“staticfiles”文件夹中。

此外,您可以以类似的方式将每个应用程序的模板放入同一个文件夹中:

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

并在您的 settings.py 中添加“模板”文件夹的目录。


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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...