2011-01-31 4 views
28

я могу перейти в каталог питон проекта (например, C: \ WWW \ MyProject), а затем выдатьиспользование Джанго: от «питона manage.py оболочки» в питона скрипт

python manage.py 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 

теперь, когда я попытался собрать все мои команды в питон скрипт, скажем, «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

+0

спасибо. добавлена ​​ошибка. – john

+0

Возможный дубликат [сценария Django для доступа к объектам модели без использования оболочки manage.py) (http://stackoverflow.com/questions/8047204/django-script-to-access-model-objects-without-using-manage-py -shell) –

ответ

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

+0

См. Мой другой ответ, который может просто сделать трюк. Однако, если вы хотите иметь аккуратное место для своих сценариев, тогда могут быть пути управления. –

2

Для импорта настроек Django используют:

from django.conf import settings 
+0

Я устанавливаю «из параметров импорта django.conf» в качестве первой строки моего скрипта, но все же python не может импортировать настройки ..... Я использую его правильно? благодаря! – john

+0

Причина, по которой я использую команды управления, заключается в том, что Django кладет кучу материала на путь Python при запуске (например, 'django') и использует команду управления, которая использует это. 'python manage.py shell' запускает обычную версию прерывателя' python', но с добавленной средой. Например, попробуйте выполнить ваши инструкции в обычном прерывателе python, а не в оболочке django. –

11

Try пута эти две строки в начале вашего сценария:

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

Этот метод является deprecated в Django 1.4. Вместо этого используйте django.conf.settings.configure() (см., Например, ответ @ adiew).

Старый метод следует.

Поместите это в начале вашего скрипта

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

Это действительно то, что делает manage.py за сценой. Чтобы увидеть это, посмотрите источник Django в django/core/management/__init__.py. После выполнения этих строк все должно быть как в ./manage.py shell.

+3

Это было обесценено в Django 1.4. используйте @adieu вместо 'из параметров импорта django.conf; settings.configure()' –

+0

Для меня это ответ __right__, все еще (по состоянию на Django 1.5 для меня). 'settings.configure()' иногда не хватает – lajarre

2

Вместо того, чтобы вручную добавлять в свой скрипт python вещи или их нужно вписывать в формат команды управления, в случае, если это не то, что нужно долгое время, вы можете получить все преимущества среды Django, запустив свой сценарий с ./manage.py runscript <myscript.py>

... но если ваш скрипт находится в папке проекта, то вы можете просто добавить эту строку в верхней части сценария питона: import os; os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

+1

Использование сценария выполняется немного сложнее, но красиво суммируется [здесь] (http://blog.brendel.com/2012/01/how-to-use-djangextensions-runscript .html) – chrisst

1

пила в https://stackoverflow.com/a/24456404/4200284 хорошее решение для Джанго> = 1.7 и в случае, если кто-то использует Джанго-конфигурации это работало для меня:

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() 
0

Вот еще один вариант: Я писал и часто использую команду управления «run», которая имеет то преимущество, что скрипты могут видеть их параметры командной строки:

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

Смежные вопросы