【问题标题】:Setting BASE_DIR and PROJECT_DIR appropriately for my Django project to capture my STATICFILES_DIRS为我的 Django 项目适当设置 BASE_DIR 和 PROJECT_DIR 以捕获我的 STATICFILES_DIRS
【发布时间】:2019-04-23 00:42:30
【问题描述】:

下面是我在 Django 1.11 中的项目结构。

repo-directory/
├── addons
|   |__ project1
|       |__ static
|       |__ template
|       |__ model.py
|   |__ project2
|       |__ static
|       |__ template
|       |__ model.py
├── config
│   ├── settings.py
│   └── urls.py
|   └── wsgi.py
└── manage.py

我想要做的是设置 STATICFILES_DIRS 以了解我的静态文件夹在哪里。 所以我在我的 settings.py 文件中执行了以下操作,但没有解决问题。

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
    os.path.join(PROJECT_DIR, "static/fonts/"),
    os.path.join(PROJECT_DIR, "static/extras/"),
    os.path.join(PROJECT_DIR, "static/img/"),
    os.path.join(PROJECT_DIR, "static/js/"),
)

任何帮助将不胜感激。

WSGI 配置

"""
WSGI config for config project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

application = get_wsgi_application()

【问题讨论】:

  • 你使用的是 Django 的 runserver 还是其他服务器?请发布您的 wsgi.py 文件。
  • @DanSwain 已发布。我正在使用python manage.py runserver
  • 错误回溯是什么样子的?
  • @slackmart 应用程序运行,但静态文件尚无法找到。我的意思是 PROJECT_DIR 不在应用程序的根目录中,而是在 addons 文件夹中。

标签: django python-2.7


【解决方案1】:

您不需要列出static 目录中的目录。试试这个:

STATICFILES_DIRS = [
    os.path.join(PROJECT_DIR, "addons/project1/static"),
    os.path.join(PROJECT_DIR, "addons/project2/static"),
]

但是,如果您的INSTALLED_APPS 中有addons.project1addons.project2,那么您可以执行以下操作,而无需在STATICFILES_DIRS 中列出任何内容:

STATICFILES_FINDERS = [
    ...,
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    ...,
]

更新:

但是,我建议您将PROJECT_DIRBASE_DIR 更改如下:

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

如果您要使用STATICFILES_DIRS,然后按如下方式更新您的STATICFILES_DIRS

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "addons/project1/static"),
    os.path.join(BASE_DIR, "addons/project2/static"),
]

【讨论】:

  • 你的代码中的PROJECT_DIR 怎么样,它实际上是否链接到正确的目录,因为我解释了我的结构是如何的
  • 我围绕您对 PROJECT_DIR 的定义列出了我的答案的第一个版本,但请参阅我的更新。我认为以我在更新中显示的方式定义 PROJECT_DIR 和 BASE_DIR 更直接,因为您可以将静态和媒体根文件夹声明为 STATIC_ROOT = os.path.join(BASE_DIR, 'static') 和 MEDIA_ROOT=os.path .join(BASE_DIR,“媒体”)。今晚在这里完成。
猜你喜欢
  • 2020-10-02
  • 2017-02-28
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
相关资源
最近更新 更多