BASE DIR的绝对路径是什么?

Dav*_*ake 27 django static

Django新手在这里.我无法理解其含义:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(BASE_DIR), "static", "static"),
)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?

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

那么STATIC_ROOT会是一个吗?还是两个?从BASE_DIR开始的目录.STATIC_ROOT FOLDER会为我制作吗?或者我必须制作一个名为"静态"的?

??? MY_PROJECT
    ??? BASE_DIR
    ?   ??? MY_APP
    ?   ?   ??? settings.py
    ?   ??? manage.py
    ??? static
Run Code Online (Sandbox Code Playgroud)

以上是否适用于此示例?那么STATIC_FILES_DIRS到底是​​什么?

Jon*_*Jon 32

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

  • 简短、简单、整洁 (3认同)

dja*_*o11 24

如果您想知道BASE_DIR的位置,您可以将其打印到终端,只需将此行添加到您的settings.py:

print "base dir path", BASE_DIR
Run Code Online (Sandbox Code Playgroud)

和runserver一起查看结果.

  • 在当前的 Django 版本中,命令应该是: print ("base dir path", PROJECT_ROOT) (2认同)

Nor*_*054 18

如果您的settings.py配置如下,您的文件系统如下所示:

??? MY_PROJECT
    ??? BASE_DIR
    ?   ??? MY_APP
    ?   ?   ??? settings.py
    ?   ??? manage.py
    ??? static        -> STATIC_ROOT
        ??? static    -> STATICFILES_DIRS
Run Code Online (Sandbox Code Playgroud)

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

??? MY_PROJECT
    ??? BASE_DIR
        ??? my_app
        ?   ??? settings.py
        ?   ??? static              -> STATICFILES_DIRS
        ??? manage.py
        ??? deployment
            ??? collected_static    -> STATIC_ROOT
            ??? media               -> MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)
# 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")
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用您喜欢的Web服务器(Apache,Nginx等)轻松部署静态和媒体文件,并将其指向"部署"目录.

更新:

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