Django在开发中直接从静态文件夹加载静态(不是来自应用程序)

Posted

技术标签:

【中文标题】Django在开发中直接从静态文件夹加载静态(不是来自应用程序)【英文标题】:Django load static in development directly from static folder (Not from apps) 【发布时间】:2018-03-08 04:00:53 【问题描述】:

我使用 django 作为后端,在前端我使用 vue.js,所以我的 99% 的 CSS 都是由 vue.js 处理的,但是我需要一个简单的base.css 来在登录页面中进行一些自定义以及一些类似的东西这个。

通常在 django 中,我会将文件放在 app/static/app/base.css 中,然后执行 collectstatic 并将其放在 static/app/ 下进行生产。

我想避免将其保留在应用程序下,因为它只是一个文件。我正在尝试在我的主要“静态”文件夹下添加一个文件夹。但似乎在开发 django 中根本没有获取它,它直接从应用程序中获取静态文件。

我如何让 django 像在生产环境中那样直接从 static 主文件夹中获取它?

即我想在我的根目录(manage.py 所在的位置)中添加一个名为 main 的文件夹,并仅使用它来存储用于生产和开发的静态文件,而不通过单个应用程序。

【问题讨论】:

【参考方案1】:

您可以使用STATICFILES_DIRS 设置告诉 Django 在其他目录中查找静态文件。

只需在 settings.py 中添加以下代码即可:

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

【讨论】:

然后我得到:django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting @Costantin STATIC_ROOTSTATICFILES_DIRS 不应该相同。如果您希望 Django 从项目的 static 目录呈现静态文件,请使用 STATICFILES_DIRS 指定它(就像在这个答案中一样)。 STATIC_ROOT 设置表示您要收集静态文件的位置。 现在一切都是这样的: STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, "..", "assets") STATICFILES_DIRS = [ os.path.join(BASE_DIR , "..", "static"), ] 但是文件夹 assets 甚至不存在。我猜如果我运行 collect statics django 会创建它,但我可能永远不需要它。我可以完全删除整个 STATIC_ROOT 吗? @Costantin 在生产中,您可能会通过 nginx(或其他服务器)提供静态文件。您必须将服务器配置中的 /static/ url 映射到您的 assests 目录,以便您的服务器可以在那里找到所有文件。我认为您确实需要 assests 文件夹。但是,如果您以其他方式配置了您的服务器,那么这一切都取决于您。

以上是关于Django在开发中直接从静态文件夹加载静态(不是来自应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

Django没有从静态目录加载样式文件

如何从 Django 加载模型管理文件中的静态文件?

Django从模板加载静态url和路径

django中怎么载入css等静态文件

django中怎么载入css等静态文件

Django:无法从 DigitalOcean Droplet 上的模板加载静态文件