2011-01-31 63 views
28

我可以移動到一個Python項目目錄(例如c:\ WWW \ myproject的),然後發出使用Django:從 「蟒蛇manage.py殼」 給Python腳本

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」,我不能執行該腳本。我必須錯過重要的事情。

我發出蟒蛇mytest.py

後來我Import error: could not import settings它是SYS道路?」

我在settings.py所在的項目目錄是.....

能有人幫幫我嗎?

感謝。

+0

你能發佈錯誤嗎?您最有可能有PYTHONPATH問題。由於你的問題提到了C:驅動器,我假設你在Windows上。 http://docs.python.org/using/windows.html – dicato 2011-01-31 03:55:25

+0

謝謝。錯誤已添加。 – john 2011-01-31 04:01:18

+0

[Django腳本訪問模型對象而不使用manage.py shell]的可能重複(http://stackoverflow.com/questions/8047204/django-script-to-access-model-objects-without-using-manage-py - 殼) – 2016-05-13 15:33:28

回答

21

嘗試使用Django management command代替。

# 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 
+0

謝謝。我會試試看。有更簡單的解決方案嗎? – john 2011-01-31 04:03:24

+0

看到我的其他答案,這可能只是伎倆。但是,如果你想爲你的腳本提供一個整潔的地方,那麼管理命令可能就是要走的路。 – 2011-01-31 04:05:39

2

導入Django的設置,使用方法:

from django.conf import settings 
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 
23

這個方法在Django 1.4中是deprecated。使用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一樣。

2

不需要手動將東西添加到您的python腳本中,也不必爲了適應管理命令格式,如果這不是需要保持很長時間的事情,您可以通過運行您的應用程序來獲得Django環境的所有好處與./manage.py runscript <myscript.py>

腳本...但如果你的腳本是在你的項目文件夾中,那麼你可以加入這一行的python腳本的頂部:import os; os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

1

看到https://stackoverflow.com/a/24456404/4200284的Django> = 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()