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_ROOT
和 STATICFILES_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在开发中直接从静态文件夹加载静态(不是来自应用程序)的主要内容,如果未能解决你的问题,请参考以下文章