我今天很困惑.
我试图在我的python脚本中使用我的django应用程序模型.
这是我的方法
import os, sys
sys.path.append("/var/www/cloudloon/horizon")
os.environ["DJANGO_SETTINGS_MODULE"] = "openstack_dashboard.settings"
from django.contrib.auth.models import User
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么它给我
ImportError: Could not import settings 'openstack_dashboard.settings' (Is it on sys.path?): cannot import name auth
Run Code Online (Sandbox Code Playgroud)
检查后,我创建了一个名为creds的文件,其中包含
export PYTHONPATH=$PYTHONPATH:/var/www/cloudloon/horizon/;
export DJANGO_SETTINGS_MODULE=openstack_dashboard.settings; django-admin.py shell;
Run Code Online (Sandbox Code Playgroud)
从信用档案所在的终端窗口,我做
source creds
Run Code Online (Sandbox Code Playgroud)
从那个django-admin.py shell,我可以导入任何我的django应用程序模型,没有任何错误.
为什么它在我的python脚本中不起作用?
我完成了Django,我需要做的是创建一个python-daemon脚本来访问我的django app模型.
我正在使用django 1.5的Ubuntu 12.04
当我寻找解决方案时,我这样做了:
import os, sys
sys.path.append("/var/www/cloudloon/horizon")
sys.path.append("/var/www/cloudloon/horizon/openstack_dashboard")
# os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"openstack_dashboard.settings")
print os.environ["DJANGO_SETTINGS_MODULE"]
for s in sys.path:
print s
from django.contrib.auth.models import User
Run Code Online (Sandbox Code Playgroud)
继承人的产出:http://paste.openstack.org/show/48787/
正如您所看到的,settings.py所在的目录存在于我的sys.path中,但是,它仍然无法导入openstack_dashboard.settings.
感谢大家.
Bur*_*lid 27
你需要编写一个自定义管理命令,而不是做这些奇怪的杂技.
在您列出的任何应用程序的目录中创建一个名为management 的模块(换句话说,创建一个目录management并在其中创建一个空__init__.py文件)INSTALLED_APPS.所以,如果你有myapp,你会创建:
myapp
|
> management
| | __init__.py
> models.py
> views.py
Run Code Online (Sandbox Code Playgroud)
然后在管理目录中创建另一个模块,commands并在其中创建一个文件,该文件是您的命令的名称; 例如my_command.py,像这样:
myapp
|
> management
| | __init__.py
| | commands
| | | __init__.py
| | | my_command.py
> models.py
> views.py
Run Code Online (Sandbox Code Playgroud)
在my_command.py,写这个样板代码:
from django.core.management.base import BaseCommand, CommandError
from myapp.models import MyModel
class Command(BaseCommand):
help = 'Does some magical work'
def handle(self, *args, **options):
""" Do your work here """
self.stdout.write('There are {} things!'.format(MyModel.objects.count()))
Run Code Online (Sandbox Code Playgroud)
保存文件后,您将能够执行此操作python manage.py my_command,并且可以访问所有模型和设置.
如果你需要将它作为一个守护进程运行,丹尼尔罗斯曼写道django-initd,这正是如此.安装后:
from django.core.management.base import CommandError
from daemon_command import DaemonCommand
from myapp.models import MyModel
class Command(DaemonCommand):
help = 'Does some magical work'
def loop_callback(self, *args, **options):
""" Do your work here """
self.stdout.write('There are {} things!'.format(MyModel.objects.count()))
Run Code Online (Sandbox Code Playgroud)
一旦你完成了github自述文件:
The important parts of such a process are these:
* it comes up automatically on server startup
* it logs errors and information to a named location, which is configurable
* if the process dies, it restarts itself straight away
[...]
Run the command as normal, but pass one of --start, --stop or --restart to
work as a daemon. Otherwise, the command will run as a standard application.
Run Code Online (Sandbox Code Playgroud)
如果项目的布局(以及设置文件的路径)如下所示,则下面的脚本应该可以工作:
/var/www/cloudloon/horizon/openstack_dashboard/settings.py
#!/usr/bin/env python
import os, sys
sys.path.append("/var/www/cloudloon/horizon")
os.environ["DJANGO_SETTINGS_MODULE"] = "openstack_dashboard.settings"
from django.contrib.auth.models import User
Run Code Online (Sandbox Code Playgroud)
我相信您遇到的问题是由于项目的安排,或者您需要sys.path在脚本中为调用添加另一个目录级别.
编辑:
查看您的github项目,horizon并且openstack_dashboard位于相同的目录级别.你想要做的是将你的设置sys.path提高一级:
sys.path.append("/var/www/cloudloon")
Run Code Online (Sandbox Code Playgroud)
小智 5
这对我有用:
from django.conf import settings
import myfolder.settings as app_settings
settings.configure(INSTALLED_APPS=app_settings.INSTALLED_APPS,DATABASES=app_settings.DATABASES)
import django
django.setup()
from myapp123.models import Sample
for s in Sample.objects.all():
print(s)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15534 次 |
| 最近记录: |