使用替代设置文件夹设置向 Django 显示在哪里可以找到我的静态文件

Show Django where to find my static files, with an alternative settings folder setup

我已经按照这个guide,建立了一个稍微different/better的django项目。

我也在尝试使用静态文件来加载站点范围的文件(例如每个页面的 site.css 文件)。为此,我也在关注这个 guide

我发现它正在寻找 http://localhost:8000/static/css/site.css 来获取我的 css,而 css(在磁盘上)是 top-level-folder/static/css/site.css,并且对于上下文, top-level-folder 也是我的应用程序和项目文件夹以及 manage.py 的位置(即 app_folderproject foldermanage.py 是兄弟姐妹与 top-level-folder 的共享父级)。

像这样:

top-folder
    |-> app-folder (same name as top-folder)
    |-> project-folder (same name as top-folder)
    |-> static

我担心的是找不到这个文件,因为我没有 settings.py 文件,我有一个设置 文件夹,里面有几个文件(根据第一个 guide.

,基数称为 base.py)

这是我的 base.py

中的相关片段
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'gantt_charts/templates/gantt_charts')]
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),
                    )

默认情况下我也有这个,STATIC_URL = '/static/'但我不知道这是否相关。

那么为什么 Django 不知道我的 .css 文件在哪里?与我的替代设置有关吗?

我编辑了我的设置 (base.py) 并移动了我的静态文件夹。

顶级文件夹和应用程序同名,所以我搞混了把它放在哪个文件夹中。

我现在有:

top-folder
    |-> project-folder (same name as top-folder)
        |-> static
    |-> app-folder

而不是:

top-folder
    |-> app-folder (same name as top-folder)
    |-> project-folder (same name as top-folder)
    |-> static

我的 basy.py 代码片段现在看起来像:

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'gantt_charts/templates/gantt_charts')]
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),
                    ]

看看我是如何在里面安放 os.path.abspath 的?这是我认为的另一个重要步骤。

还值得注意的是,您可以在设置中添加调试打印输出(毕竟是 Python 代码),这确实很有帮助。例如:

print ("Base Dir is at:",BASE_DIR)
print ("Static Dir is at:",STATICFILES_DIRS)

每次 runserver 命令触发时都会运行。

与其更改目录结构,不如更改 BASE_DIR 以反映您引入的额外级别:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))

通过这个小改动,您可以将静态文件夹保留在 "right" 位置。