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文件夹会为我制作吗?还是我必须制作一个名为"静态"的?
└── MY_PROJECT
├── BASE_DIR
│ ├── MY_APP
│ │ └── settings.py
│ └── manage.py
└── static
上面的例子对吗?那么STATIC_FILES_DIRS到底在哪里?
BASE_DIR是您的Django项目目录。manage.py所在的同一目录。
如果您想知道BASE_DIR的位置,您可以将其打印到终端,只需将此行添加到您的设置中即可。py:
print "base dir path", BASE_DIR
和运行服务器以查看结果。
如果您的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")
现在,您可以使用您喜欢的指向"部署"目录的Web服务器(Apache、Nginx等)轻松部署静态和媒体文件。
更新:
我还为MEDIA_ROOT添加了一个推荐的配置,并更改了收集的静态的路径。
这个答案是为Python 3和Django 3.x编写的。
为dev
、prod
以及test
设置设置Django项目是很常见的。这些设置通常继承base
设置,后者在名为your_app_name/settings/base.py
的文件中定义。在base.py
中,BASE_DIR
可以这样定义:
BASE_DIR = Path(__file__).resolve().parent.parent.parent
manage.py shell
子命令接受要使用-c
选项进行解释的行。以下是一个单行解决方案,它为名为frobshop
:的Django应用程序显示BASE_DIR
$ ./manage.py shell -c 'from frobshop.settings import base; print(f"BASE_DIR={base.BASE_DIR}")'
BASE_DIR=/var/work/django/frobshop
我在Django Notes博客页面中提供了更多信息。
对于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并添加-->STATICILES_DIRS=文件末尾的[os.path.join(BASE_DIR,'static')]。
-
转到你的模板文件夹中的基本html模板,并在标题部分添加这2行(只需确保你在static中创建了一个文件夹。在我的情况下,它是css,如下所示,可能是不同的名称):
a) {%加载静态%}b)
如果其中包含您不知道它在哪里或如何工作的路径,只需在文件print('my directory', UNKNOWN_DIR)
的底部键入即可,然后在终端Python manage.py runserver
中运行。
'my directory'
只是一个你可以在任何字符串中键入的字符串,那么UNKNOWN_DIR
就是你想知道的。然后运行Python manage.py runserver
。
示例:
打印('my-path',(os.path.abspath(文件))
python manage.py runserver
print('my-path',(os.path.dirname(os.part.abspath(文件)))
python manage.py runserver
print('my-path',os.path.join(BASE_DIR,'staticfiles'))
python manage.py runserver
将下面的代码添加到"settings.py",这样你就可以看到";BASE_DIR"在您的控制台上:
# "settings.py"
print("BASE_DIR is", BASE_DIR)