如何在 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

查看此页面:Using settings in Python code