Django 基本目录的绝对路径是什么?
这里是Django新手。我很难理解以下内容的含义:Django 基本目录的绝对路径是什么?,django,static,Django,Static,这里是Django新手。我很难理解以下内容的含义: BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 及 这里发生了什么事 我认为“文件”是我们在(?)中的settings.py文件,所以BASE_Dir是两个以上的文件夹。。。?i、 e.里面有manage.py的那个 那么静态_根将是一?还是两个?从基本目录向上的目录。是否为我创建静态根文件夹?还是我必须做一个叫做“静态”的 以上是这个例子的正确答案吗?那么,静态文件将在哪里 如果您
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"),
]
我所做的和真正帮助我的是:
如果其中包含路径,而您不了解路径的位置或工作方式,只需在文件底部键入
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