【问题标题】:Local development Django static files coming from library directory rather than my project来自库目录而不是我的项目的本地开发 Django 静态文件
【发布时间】:2021-09-10 13:46:06
【问题描述】:

我有一个设置为提供静态文件的 Django (3.1) 应用程序,即 myapp/settings.py

DEBUG = True

.
.
.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
    .
    .
    .
]

.
.
.

STATIC_URL = '/static/'

STATIC_ROOT = 'static/'

但不是从 myapp 的 static 目录提供文件,而是从 /Library/Python/3.7/site-packages/django/contrib/admin/static/ 提供静态文件。我已经通过将文件添加到两个目录来测试这一点,

~/Projects/myapp/static/file-from-project.js
/Library/Python/3.7/site-packages/django/contrib/admin/static/file-from-library.js

然后

python3 manage.py runserver

使用包含线条的模板

<script src="{% static 'file-from-project.js' %}"></script>
<script src="{% static 'file-from-library.js' %}"></script>

file-from-library.js 加载正常,但我得到file-from-project.js 的404。我在这里做错了什么?

引用文件的目录结构:

myapp
  /myapp
    settings.py
    .
    .
    .
  /static
    file-from-project.js
    .
    .
    .
  /templates
    .
    .
    .
  manage.py
  .
  .
  .

【问题讨论】:

  • 你把file-from-project放在哪里了?
  • @michjnich 在~/Projects/myapp/static/file-from-project.js 中,我从~/Projects/myapp/ 目录运行。

标签: django python-3.7 django-staticfiles django-3.1


【解决方案1】:

好的,我看到了我认为的问题。

STATIC_ROOT 是绝对路径,而不是相对路径。如果您将其设置为例如。 BASE_DIR / "static"你可能会得到你想要的。

我通常将BASE_DIR 设置在我的settings.py 的顶部,因为它用于一些事情:

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

另一件事是您拥有DEBUG=True,这意味着它将在您的应用程序目录下查看您的STATIC_URL。如果您将文件移动到:

~/Projects/myapp/static/app_folder/file-from-project.js

它应该工作:)

编辑:我注意到myapp 是一个应用程序,而不是项目名称,这让我想知道项目叫什么。

您用于此结构开发的静态文件可能位于:

~/Projects/myapp/static/myapp/<static file>

当您部署时,显然DEBUG 应该是False,但在这里您应该运行collectstatic 以便将所有静态文件收集到一个位置以进行部署。

【讨论】:

  • BASE_DIR 默认设置为这种方式,但移动到~/Projects/myapp/myapp/static/file-from-project.js 并没有帮助。还是app_folder 的意思不同?
  • 另外,更改为 STATIC_ROOT = os.path.join(BASE_DIR, 'static') 不会影响内容的来源。
  • 我的意思是,在您的路径中myapp 是您的 django 项目的名称,然后该项目包含 django 应用程序,每个应用程序都可能具有自己的静态文件。
  • 啊,等等,你的应用是 myapp 我从 INSTALLED_APPS 看到的。那你的 django 项目叫什么?不是Projects???您能否发布您的目录结构?
  • 添加了目录结构。生产很好,我目前只是在本地开发方面遇到问题。
猜你喜欢
  • 2021-09-30
  • 2020-05-05
  • 2011-09-18
  • 1970-01-01
  • 2020-04-18
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多