【问题标题】:What is the absolute path of BASE DIR?BASE DIR 的绝对路径是什么?
【发布时间】:2014-10-30 12:58:01
【问题描述】:

这里是 Django 新手。我很难理解:

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

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(BASE_DIR), "static", "static"),
)

这里发生了什么?

我认为“文件”是我们所在的 settings.py 文件(?),所以 BASE_Dir 是两个文件夹...?即其中包含manage.py的那个?

那么 STATIC_ROOT 会是一个吗?还是两个?从 BASE_DIR 向上的目录。会为我制作 STATIC_ROOT 文件夹吗?还是我必须制作一个称为“静态”的?

└── MY_PROJECT
    ├── BASE_DIR
    │   ├── MY_APP
    │   │   └── settings.py
    │   └── manage.py
    └── static

以上内容适用于这个例子吗?那么 STATIC_FILES_DIRS 到底是什么?

【问题讨论】:

  • 这里:docs.python.org/2/library/…获取应用程序基目录的abs路径。休息一下,我想你可以弄清楚。
  • 谢谢,我该怎么处理os.path.dirname(path)
  • 又在获取目录的绝对路径,相信你已经在BASE_DIR
  • 好的。错了,谢谢。可能是一流的信息,但超出了我的想象。

标签: django static


【解决方案1】:

BASE_DIR 是您的 Django 项目目录。 manage.py 所在目录。

【讨论】:

  • 短小精悍
【解决方案2】:

如果你想知道BASE_DIR在哪里,可以打印到终端,只要在你的settings.py中加入这一行:

print "base dir path", BASE_DIR

然后运行服务器查看结果。

【讨论】:

  • 太棒了!谢谢django11。这将解决我的许多问题。
  • 在当前Django版本中,命令应该是:print("base dir path", PROJECT_ROOT)
  • @Dror 你指的是哪个版本??我刚刚在 Django 1.10 中检查了它,它工作正常。
  • @Cody “打印”命令是 python 的。我使用的是 python 3.5.X
【解决方案3】:

如果你的 settings.py 是这样配置的,你的文件系统看起来像这样:

└── MY_PROJECT
    ├── BASE_DIR
    │   ├── MY_APP
    │   │   └── settings.py
    │   └── manage.py
    └── static        -> STATIC_ROOT
        └── static    -> STATICFILES_DIRS

但这不是一个好的配置,因为它混合了收集的静态数据和 Django 尝试查找静态文件的目录(例如收集它们)。使用这个可能会更好:

└── MY_PROJECT
    └── BASE_DIR
        ├── my_app
        │   ├── settings.py
        │   └── static              -> STATICFILES_DIRS
        ├── manage.py
        └── deployment
            ├── collected_static    -> STATIC_ROOT
            └── media               -> MEDIA_ROOT

# settings.py
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATICFILES_DIRS = (os.path.join(
    BASE_DIR, "my_app", "static"),)
STATIC_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "deployment", "collected_static")
MEDIA_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "deployment", "media")

现在您可以使用自己喜欢的网络服务器(Apache、Nginx 等)轻松部署静态和媒体文件,并将其指向“部署”目录。

更新:

我还为 MEDIA_ROOT 添加了一个推荐的配置,并更改了收集静态的路径。

【讨论】:

  • 太棒了!非常感谢诺曼。愿你的腰硕果累累。
  • 那个树形图太有用了!
  • MEDIA_ROOT 应该在 BASEDIR 下还是在 MY_APP 下?
【解决方案4】:

对于我使用的 django 项目中的路径设置

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_PRODUCTION_DIR = os.path.abspath(os.path.join(
os.path.dirname(__file__), '..', '..', 'static_production'))

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(STATIC_PRODUCTION_DIR, "static")

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(STATIC_PRODUCTION_DIR, "media")


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

【讨论】:

    【解决方案5】:

    此答案是为 Python 3 和 Django 3.x 编写的。

    dev, prod and perhaps test settings 建立一个 Django 项目是很常见的。这些设置通常继承自base 设置,这些设置在名为your_app_name/settings/base.py 的文件中定义。在base.py 内,BASE_DIR 可以这样定义:

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

    manage.py shell 子命令接受要使用 -c 选项解释的行。 这是一个为名为@9​​87654334@ 的Django 应用程序显示BASE_DIR 的单行解决方案:

    $ ./manage.py shell -c 'from frobshop.settings import base; print(f"BASE_DIR={base.BASE_DIR}")'
    BASE_DIR=/var/work/django/frobshop
    

    我在Django Notes blog page 中提供更多信息。

    【讨论】:

      【解决方案6】:

      我所做的并且真正帮助我的是:

      1. 转到 settings.py 并在文件末尾添加 --> STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]。

      2. 转到模板文件夹中的基本 html 模板,并在 head 部分中添加这两行(只需确保在静态中创建一个文件夹。在我的情况下,它是 css,如下所示,可能是不同的名称):

        a){% 加载静态 %} b)

      【讨论】:

        【解决方案7】:

        如果其中包含您不了解它在哪里或它如何工作的路径,只需在文件底部输入print('my directory', UNKNOWN_DIR),然后在终端Python manage.py runserver 中运行。

        'my directory' 只是一个字符串,您可以输入任何字符串然后UNKNOWN_DIR 就是您想知道它在哪里。然后运行Python manage.py runserver

        示例:

        print('我的路径', (os.path.abspath(file)) )

        python manage.py runserver

        print('我的路径', (os.path.dirname(os.path.abspath(file))))

        python manage.py runserver

        print('我的路径', os.path.join(BASE_DIR, 'staticfiles') )

        python manage.py runserver

        【讨论】:

          猜你喜欢
          • 2020-11-16
          • 1970-01-01
          • 1970-01-01
          • 2018-04-02
          • 2012-05-04
          • 1970-01-01
          • 1970-01-01
          • 2021-08-22
          • 1970-01-01
          相关资源
          最近更新 更多