BASE DIR的绝对路径是什么?

时间:2014-09-05 14:24:27

标签: django static

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 FOLDER会为我制作吗?或者我必须制作一个名为" static"?

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

上面这个例子是对的吗?那么STATIC_FILES_DIRS到底是​​什么?

7 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:20)

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

print "base dir path", BASE_DIR

和runserver查看结果。

答案 2 :(得分:16)

如果您的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添加了一个值得推荐的配置,并更改了收集的静态路径。

答案 3 :(得分:0)

对于我使用的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"),
]

答案 4 :(得分:0)

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

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

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

    a){%load static%} b)

答案 5 :(得分:0)

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

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

示例:

print('my path',(os.path.abspath( file )))

python manage.py runserver

print('my path',(os.path.dirname(os.path.abspath( file )))))

python manage.py runserver

print('my path',os.path.join(BASE_DIR,'staticfiles'))

python manage.py runserver

答案 6 :(得分:0)

这个答案是为 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 选项解释的行。 这是一个为名为 BASE_DIR 的 Django 应用程序显示 frobshop 的单行解决方案:

$ ./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 中提供了其他信息。