Django 基本目录的绝对路径是什么?

Django 基本目录的绝对路径是什么?,django,static,Django,Static,这里是Django新手。我很难理解以下内容的含义: BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 及 这里发生了什么事 我认为“文件”是我们在(?)中的settings.py文件,所以BASE_Dir是两个以上的文件夹。。。?i、 e.里面有manage.py的那个 那么静态_根将是一?还是两个?从基本目录向上的目录。是否为我创建静态根文件夹?还是我必须做一个叫做“静态”的 以上是这个例子的正确答案吗?那么,静态文件将在哪里 如果您

这里是Django新手。我很难理解以下内容的含义:

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

这里发生了什么事

我认为“文件”是我们在(?)中的settings.py文件,所以BASE_Dir是两个以上的文件夹。。。?i、 e.里面有manage.py的那个

那么静态_根将是一?还是两个?从基本目录向上的目录。是否为我创建静态根文件夹?还是我必须做一个叫做“静态”的


以上是这个例子的正确答案吗?那么,静态文件将在哪里

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

└── MY_PROJECT
    ├── BASE_DIR
    │   ├── MY_APP
    │   │   └── settings.py
    │   └── manage.py
    └── static        -> STATIC_ROOT
        └── static    -> STATICFILES_DIRS
BASE_DIR = Path(__file__).resolve().parent.parent.parent
但这不是一个好的配置,因为它混淆了收集的静态文件和Django试图查找静态文件(例如收集静态文件)的目录。最好使用以下方法:

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

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

更新:


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

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

print "base dir path", BASE_DIR

并运行服务器查看结果。

BASE\u DIR是您的Django项目目录。manage.py所在的目录。

对于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"),
]

我所做的和真正帮助我的是:

  • 转到settings.py并在文件末尾添加-->STATICFILES\u DIRS=[os.path.join(BASE\u DIR,'static')]

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

    a) {%load static%} (b)


  • 如果其中包含路径,而您不了解路径的位置或工作方式,只需在文件底部键入
    print('my directory',UNKNOWN_DIR)
    ,然后在终端
    Python manage.py runserver
    中运行即可

    “我的目录”
    只是一个字符串,你可以在任何字符串中键入,然后
    未知\u DIR
    就是你想知道它在哪里。然后运行
    Python manage.py runserver

    例如:

    打印('我的路径',(os.path.abspath(文件))

    python manage.py runserver

    打印('my path',(os.path.dirname(os.path.abspath(文件))

    python manage.py runserver

    print('my path',os.path.join(BASE\u DIR,'staticfiles'))


    python manage.py runserver

    这个答案是为python 3和Django 3.x编写的

    通常会为设置Django项目。这些设置通常继承自
    base
    设置,这些设置在名为
    your\u app\u name/settings/base.py
    的文件中定义。在
    base.py
    中,
    base\u DIR
    的定义如下:

    └── MY_PROJECT
        ├── BASE_DIR
        │   ├── MY_APP
        │   │   └── settings.py
        │   └── manage.py
        └── static        -> STATIC_ROOT
            └── static    -> STATICFILES_DIRS
    
    BASE_DIR = Path(__file__).resolve().parent.parent.parent
    
    manage.py shell
    子命令接受使用
    -c
    选项解释的行。 下面是一个单线解决方案,它为名为
    frobshop
    的Django应用程序显示
    BASE\u DIR

    $。/manage.py shell-c'来自frobshop.settings导入库;打印(f“BASE_DIR={BASE.BASE_DIR}”)
    BASE_DIR=/var/work/django/frobshop
    

    我在my.

    中提供了其他信息:获取应用程序基本目录的abs路径。剩下的我想你可以弄明白了。谢谢,我该怎么处理
    os.path.dirname(path)
    ?它又得到了目录的绝对路径,我相信你已经在
    BASE\u DIR
    中找到了。呃,谢谢。可能是恒星信息,但远远超过我的头脑。太棒了!非常感谢,诺曼。愿你的腰长满果实。那张树形图非常有用!MEDIA_ROOT应该在BASEDIR下还是在MY_应用程序下?太棒了!谢谢你。这将解决我的许多问题。在当前的Django版本中,命令应该是:print(“base dir path”,PROJECT_ROOT)@Dror您指的是哪个版本??我刚刚在Django 1.10中检查了它,它工作得很好。@Cody“print”命令是python的。我使用的是python 3.5.Xshort,简单而整洁
    BASE_DIR = Path(__file__).resolve().parent.parent.parent