使用django:from";python manage.py shell“;到python脚本

使用django:from";python manage.py shell“;到python脚本,python,django,Python,Django,我可以移动到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('writ

我可以移动到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

然后我得到
导入错误:无法导入设置
它是否在系统路径上?”

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

谁能帮我一下吗

谢谢。

试着改用a

然后(如果您遵循文档),您将能够以以下方式执行该命令:

python manage.py my_command

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

from django.conf import settings

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

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
此方法在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/\uuu init\uuuuuuuuuuuuuuuupy.py
中查看Django源代码。执行这些行后,所有内容都应该与
/manage.py shell
中的内容一样,而不是手动将内容添加到python脚本中,或者必须适应管理命令表单在,如果这不是需要长期保留的东西,那么您可以通过使用
/manage.py runscript
运行脚本来获得Django环境的所有好处


…但是如果您的脚本在项目文件夹中,那么您可以将这一行添加到python脚本的顶部:
import os;os.environ['DJANGO\u SETTINGS\u MODULE']=“SETTINGS”
更新:From

/manage.py shellDjango>=1.7找到了一个很好的解决方案,如果有人使用Django配置,这对我来说很有效:

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”,它的优点是脚本可以查看其命令行参数:


你能发布错误吗?你很可能有PYTHONPATH问题。因为你的问题提到了C:驱动器,我假设你在Windows上。如果你想看到我的另一个答案,这可能会奏效。但是如果你想为脚本找一个整洁的地方,那么管理命令可能是最好的选择。我把“从django.conf导入设置”作为我脚本的第一行,但python仍然无法导入设置……我使用它的方式正确吗?谢谢!我使用管理命令的原因是django在启动时在python路径上放了一堆东西(例如
django
)使用管理命令可以利用这一点。
python manage.py shell
启动一个常规版本的
python
interrupter,但添加了环境。例如,尝试在常规python interrupter而不是django shell中执行语句。django 1.4中已经降低了这一点。改用@adieu
from django.conf import settings;settings.configure()
对我来说,这仍然是正确的答案(从django 1.5开始对我来说)。
settings.configure()
有时还不够使用runscript有点复杂,但总结得很好
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()