问题描述
我目前在 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
默认将查找存储在 STATICFILES_DIRS 设置中的文件 (使用 django.contrib.staticfiles.finders.FileSystemFinder)并在一个 每个应用程序的静态子目录(使用 django.contrib.staticfiles.finders.AppDirectoriesFinder)。如果多个 存在同名文件,找到的第一个文件将是 用过
,更好的做法是将所有静态文件放在根目录的同一个文件夹中,而不是每个应用程序:
# ...
├── 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