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

joh*_*ohn 28 python django

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

   python manage.py shell
Run Code Online (Sandbox Code Playgroud)

然后我可以使用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
Run Code Online (Sandbox Code Playgroud)

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

我发出了python mytest.py

然后我得到Import error: could not import settings它是在sys路径上吗?"

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

有人可以帮帮我吗?

谢谢.

phu*_*ehe 23

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

老方法如下.

把它放在脚本的开头

from django.core.management import setup_environ
import settings
setup_environ(settings)
Run Code Online (Sandbox Code Playgroud)

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

  • 这已在Django 1.4中折旧.使用@adieu代替`来自django.conf导入设置; settings.configure()` (3认同)

Mar*_*row 22

请尝试使用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
Run Code Online (Sandbox Code Playgroud)

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

python manage.py my_command
Run Code Online (Sandbox Code Playgroud)


adi*_*ieu 11

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

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
Run Code Online (Sandbox Code Playgroud)


Bab*_*abu 6

更新:来自另一篇文章

./manage.py shell < myscript.py