use django: from "python manage.py shell" to python script


Question

I can move to a python project directory (say c:\www\myproject) and then issue

   python manage.py shell

and then I can use all modules from django project, say the following piece of commands from the shell command:

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

now, when I tried to collect all my commands into a python script, say "mytest.py", I cannot execute the script. I must missed something important.

I issued python mytest.py

then I got Import error: could not import settings Is it on sys path?"

I'm in the project directory where settings.py resides.....

Could some one help me out?

thanks.

1
28
1/31/2011 4:04:36 AM

Accepted Answer

Try using a Django management command instead.

# 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

And then (if you follow the docs) you will be able to execute the command in the following fashion:

python manage.py my_command
22
1/31/2011 3:59:28 AM

This method is deprecated in Django 1.4. Use django.conf.settings.configure() instead (see @adiew's answer for example code).

Old method follows.

Put this at the beginning of your script

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

This is really what the manage.py does behind the scene. To see it view the Django source in django/core/management/__init__.py. After executing these lines everything should be just like in ./manage.py shell.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon