有没有比这更好的方法来为多个应用程序加载 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
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
更好的做法是将所有静态文件放在根目录的同一个文件夹中,而不是每个应用程序:
# ...
├── 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
我目前在 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
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
更好的做法是将所有静态文件放在根目录的同一个文件夹中,而不是每个应用程序:
# ...
├── 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
.
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