如何在 Django 项目的任何位置为任何脚本获取 BASE_DIR?
how can you get your BASE_DIR for any script in any location in Django project?
我可以在 shell 中导入 BASE_DIR,如下所示:
In [3]: from scriptcitymirror.settings import BASE_DIR
In [4]: BASE_DIR
Out[4]: '/home/cchilders/projects/django_practice/scriptcity_public'
但是在为我编写应用程序的脚本中,我无法导入完全相同的东西:
#!/usr/bin/env python
import os, subprocess, sys, re, requests, time
from scriptcitymirror.settings import BASE_DIR
爆炸为:
cchilders@cody_pc:~/projects/django_practice/scriptcity_public$ robots/app_writer.py
Traceback (most recent call last):
File "robots/app_writer.py", line 4, in <module>
from scriptcitymirror.settings import BASE_DIR
ImportError: No module named scriptcitymirror.settings
我惊呆了。另外,我通常在主目录(settings.py 目录中的 urls.py 文件)的方法不起作用:
from django.conf import settings
settings.configure()
print settings.MEDIA_URL
现在我丑陋的解决方法是调用 CWD=os.getcwd()
并要求脚本从主项目路径 运行 开始。我的文件夹如下图所示。如何在 django 项目中的任何地方正确获取 BASE_DIR? (但在这里,我想在 'robots' 中使用它们,这不是应用程序。在制作测试应用程序后导入也不起作用)。谢谢
首先,您不应导入项目的 settings
,因为它会丢失默认设置。因此,为了获得所有设置,您应该始终导入 django.conf.settings
.
其次,Django 文档说 django.conf.settings
不是一个模块——它是一个对象。所以你不能导入个人设置。
# WRONG way (will not work)
from django.conf.settings import BASE_DIR
# CORRECT way
from django.conf import settings
base_dir = settings.BASE_DIR
我可以在 shell 中导入 BASE_DIR,如下所示:
In [3]: from scriptcitymirror.settings import BASE_DIR
In [4]: BASE_DIR
Out[4]: '/home/cchilders/projects/django_practice/scriptcity_public'
但是在为我编写应用程序的脚本中,我无法导入完全相同的东西:
#!/usr/bin/env python
import os, subprocess, sys, re, requests, time
from scriptcitymirror.settings import BASE_DIR
爆炸为:
cchilders@cody_pc:~/projects/django_practice/scriptcity_public$ robots/app_writer.py
Traceback (most recent call last):
File "robots/app_writer.py", line 4, in <module>
from scriptcitymirror.settings import BASE_DIR
ImportError: No module named scriptcitymirror.settings
我惊呆了。另外,我通常在主目录(settings.py 目录中的 urls.py 文件)的方法不起作用:
from django.conf import settings
settings.configure()
print settings.MEDIA_URL
现在我丑陋的解决方法是调用 CWD=os.getcwd()
并要求脚本从主项目路径 运行 开始。我的文件夹如下图所示。如何在 django 项目中的任何地方正确获取 BASE_DIR? (但在这里,我想在 'robots' 中使用它们,这不是应用程序。在制作测试应用程序后导入也不起作用)。谢谢
首先,您不应导入项目的 settings
,因为它会丢失默认设置。因此,为了获得所有设置,您应该始终导入 django.conf.settings
.
其次,Django 文档说 django.conf.settings
不是一个模块——它是一个对象。所以你不能导入个人设置。
# WRONG way (will not work)
from django.conf.settings import BASE_DIR
# CORRECT way
from django.conf import settings
base_dir = settings.BASE_DIR