используйте django: от "python manage.py shell" к скрипту python - PullRequest
28 голосов
/ 31 января 2011

Я могу перейти в каталог проектов 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 .....

Может ли кто-нибудь мне помочь?

спасибо.

Ответы [ 8 ]

23 голосов
/ 17 марта 2011

Этот метод устарел в 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.

22 голосов
/ 31 января 2011

Попробуйте вместо этого использовать команду управления 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
11 голосов
/ 31 января 2011

Попробуйте поместить эти две строки в начало вашего скрипта:

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
4 голосов
/ 02 сентября 2013

ОБНОВЛЕНИЕ: С другой пост .

./manage.py shell < myscript.py

2 голосов
/ 25 марта 2013

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

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

2 голосов
/ 31 января 2011

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

from django.conf import settings
1 голос
/ 27 декабря 2014

увидел в 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()
0 голосов
/ 12 марта 2015

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

http://lino -framework.org / апи / lino.management.commands.run.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...