On Tue, 2008-02-12 at 06:08 -0800, Julien wrote:
> Oh, I see!! Thanks for the explanation.
> 
> So, what I'm trying to achieve is to specify a model class as a
> setting that can be used in some views.
> 
> As you've said, doing "from myapp.forms import MyModelForm" is not
> possible, so I tried:
> 
> MY_MODEL_FORM = 'myapp.forms.MyModelForm'

Now you see why all the Django settings like this are strings. :-)

> And then, in some view I do:
> 
> from django.conf import settings
> splitted = settings.MY_MODEL_FORM.split('.')
> module = __import__(splitted[0])
>     for i in range(len(splitted)-1):
>         module = getattr(module, splitted[i+1])
> my_model_form_class = module
> my_model_form = my_model_form_class()

You're certainly on the right track. However, you're not using the full
power of __import__(). Have a read of the Python docs (in the Library
Reference, have a look at builtin functions. It's the first entry in
ยง2.1). Basically, the trick is that you can pass a dotted string form as
the first argument to __import__. However, you also need to watch out
for what __import__ returns (explained in the docs). So, typically,
you'll be doing this:

        klass = __import__(settings.MY_MODEL_FORM, {}, {}, '')
        
where I've used "klass" instead of "my_model_form_class". Passing '' as
the last argument means that klass will now be a reference to what you
expect (try leaving it off and look at what klass is, if you're
interested).

Not surprisingly, Django does this sort of thing all over the place.
See, for example, django/template/loader.py or
django/db/models/loader.py (just search for __import__). It's the
standard way to import something dynamically on those rare occasions
when you need to.

Regards,
Malcolm

-- 
Plan to be spontaneous - tomorrow. 
http://www.pointy-stick.com/blog/


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to