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到底是什么?
答案 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)
我所做的并且对我真正有帮助的是:
转到settings.py并在文件末尾添加-> STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]。
转到您的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 中提供了其他信息。