繁体   English   中英

使用django:从“python manage.py shell”到python脚本

[英]use django: from “python manage.py shell” to python script

我可以移动到python项目目录(比如c:\\ www \\ myproject),然后发出

   python manage.py shell

然后我可以使用django项目中的所有模块,从shell命令中说出以下命令:

import settings 
from django.template import Template, Context

t=Template("My name is {myname}.")
c=Context({"myname":"John"})
f = open('write_test.txt', 'w')
f.write(t.render(c))
f.close

现在,当我尝试将所有命令收集到python脚本中时,说“mytest.py”,我无法执行脚本。 我必须错过重要的事情。

我发出了python mytest.py

然后我得到Import error: could not import settings是否在sys路径上?“

我在settings.py所在的项目目录中......

有人可以帮帮我吗?

谢谢。

在Django 1.4中不推荐使用此方法。 请改用django.conf.settings.configure() (有关示例代码,请参阅@ adiew的答案)。

老方法如下。

把它放在脚本的开头

from django.core.management import setup_environ
import settings
setup_environ(settings)

这就是manage.py在幕后所做的事情。 要查看它在django/core/management/__init__.py查看Django源代码。 执行这些行之后,所有内容都应该像./manage.py shell

请尝试使用Django管理命令

# myproject/myapp/management/commands/my_command.py

from django.core.management.base import NoArgsCommand
from django.template import Template, Context
from django.conf import settings

class Command(NoArgsCommand):
    def handle_noargs(self, **options):
        t=Template("My name is {myname}.")
        c=Context({"myname":"John"})
        f = open('write_test.txt', 'w')
        f.write(t.render(c))
        f.close

然后(如果您按照文档),您将能够以下列方式执行命令:

python manage.py my_command

尝试将这两行放在脚本的开头:

from django.conf import settings
settings.configure() # check django source for more detail

# now you can import other django modules
from django.template import Template, Context

更新:另一篇文章

./manage.py shell < myscript.py

而不是手动将内容添加到python脚本中,或者必须适合管理命令格式,以防这不是需要长时间保留的东西,您可以通过使用./manage.py runscript <myscript.py>运行脚本来获得Django环境的所有好处。 ./manage.py runscript <myscript.py>

...但是如果您的脚本在您的项目文件夹中,那么您只需将此行添加到python脚本的顶部: import os; os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' import os; os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

要导入Django的设置,请使用:

from django.conf import settings

https://stackoverflow.com/a/24456404/4200284中看到了Django> = 1.7的好解决方案,如果有人使用django-configurations,这对我有用:

import sys, os, django

sys.path.append('/path/to/project')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.local") # path to config

## if using django-configurations
os.environ.setdefault("DJANGO_CONFIGURATION", "Local")
from configurations import importer
importer.install()

django.setup() ## apparently important for django 1.7

from foo.models import Bar

print Bar.objects.all()

这是另一种变体:我编写并经常使用管理命令“run”,其优点是脚本可以看到它们的命令行参数:

http://lino-framework.org/api/lino.management.commands.run.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM