我setup_environ()
前一阵子写了一个一次性的 python 脚本,从命令行运行,它根本不适合作为自定义 manage.py 命令(我的首选)。它很好地设置了一切。我假设我们弃用了这个函数,因为非 django pythonistas 拿 djangonauts 取笑这种神奇的东西,我们厌倦了感觉肮脏。那么,如果它已被弃用,还有什么替代方案?也许这是一个懒惰的问题,但我需要运行什么来代替 setup_environ 来达到相同的效果?我想我可以将函数复制/粘贴到我的脚本中,但我假设这不是弃用它的目的。(显然我仍然可以使用已弃用的函数,但我希望我的脚本能够在几个版本的 django 中存活)
问问题
21758 次
6 回答
61
import os
import django
from myapp import models
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()
print models.MyModel.objects.get(pk=1)
于 2014-03-28T20:16:52.337 回答
28
扩展 miki725 的答案,如果你有
from django.core.management import setup_environ
import fooproject.settings as settings
setup_environ(settings)
只需替换为
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
from django.conf import settings
并且您的设置将作为设置加载。
对于 Django 1.7+,请参阅 Ben Davis 的解决方案。
于 2014-01-15T22:45:02.950 回答
21
Django 1.4 release notes 官方推荐使用django.conf.settings.configure()
来设置设置。这对于您需要以“pythonic”方式完成所有操作的小型脚本来说非常有用。但是,如果您有一个更大的项目,我喜欢使用 Django 方法,即有一个单独的设置模块/包,然后是DJANGO_SETTINGS_MODULE
环境变量中的路径。这是用于manage.py
:
# manage.py
# ...
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
# ...
发布文档可以在这里找到。
于 2013-02-24T05:53:20.793 回答
2
要添加 Leandro N 所说的内容(谢谢,Leandro!),您必须添加 django.setup()。
例如,我的代码:
import os, django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
from app.models import ModelA, ModelB
仅供参考,我在 Django 1.10 上。
于 2017-03-06T06:01:38.187 回答
2
我正在使用 Django 2.0,Ben Davis 很接近,但我无法让它工作。似乎对我有用的是
import os
import sys
import django
sys.path.append("/path/to/django/project") #only required if project not already in path
os.environ.setdefault('DJANGO_SETTINGS_MODULE','myapp.settings')
django.setup() #run django.setup BEFORE importing modules to setup the environ
from myapp.models import Thingy
t=Thingly.objects.all()
print(t)
于 2018-08-31T21:30:32.490 回答
1
免责声明:我使用的是 Django 1.8
只需添加我的 2 美分:我已经尝试了此页面中提供的一些解决方案,但它们根本不起作用。我刚刚想出了一个解决方案,我将在下面分享。
确保您位于项目的根文件夹中。所在manage.py
的位置相同。
#make sure basic imports are in place
>>> import os,django
#set the specific django settings file
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings.base")
# import your modules and use them just like you do in your
# web apps
>>> from apps.customers import models as c
# normal usage... for instance:
>>> dir(c)
['You', 'Will', 'See', 'Your', 'Models', ... ]
于 2016-02-25T20:34:31.033 回答