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