关于django:BASE DIR的绝对路径是什么?

What is the absolute path of BASE DIR?

Django新手在这里。 我无法理解以下含义:

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

1
2
3
4
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 FOLDER是否适合我? 还是我必须做一个叫做"静态"的东西?

1
2
3
4
5
6
└── MY_PROJECT
    ├── BASE_DIR
    │ ├── MY_APP
    │ │ └── settings.py
    │ └── manage.py
    └── static

以上是该示例的权利吗? 那么到底是什么呢?STATIC_FILES_DIRS到底在哪里呢?


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


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

1
print"base dir path", BASE_DIR

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


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

1
2
3
4
5
6
7
└── MY_PROJECT
    ├── BASE_DIR
    │   ├── MY_APP
    │   │   └── settings.py
    │   └── manage.py
    └── static        -> STATIC_ROOT
        └── static    -> STATICFILES_DIRS

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

1
2
3
4
5
6
7
8
9
└── MY_PROJECT
    └── BASE_DIR
        ├── my_app
        │   ├── settings.py
        │   └── static              -> STATICFILES_DIRS
        ├── manage.py
        └── deployment
            ├── collected_static    -> STATIC_ROOT
            └── media               -> MEDIA_ROOT
1
2
3
4
5
6
7
8
# 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")

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

更新:

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


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

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

  • 转到模板文件夹中的基本html模板,并在开头部分添加这两行(只需确保以静态方式创建一个文件夹。就我而言,它是css,如下图所示,可以使用不同的名称):

    a){%load static%}
    b)


  • 我使用的Django项目中的路径设置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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"),
    ]