четверг, 24 ноября 2011 г.

Re: регистрация класса по имени

В питоне есть модуль inspect.
Можно с помощью него к примеру выбрать из произвольного модуля конкретные объекты.
А уже потом в их ограниченном наборе пытаться найти то, на что там пришел запрос извне

Для питона 2.6 что-то вроде (если формы -- классы, наследованные от ModelForm)

from inspect import getmembers, isclass

def check_subclass(cls): 
    def parent_check(obj):
        if isclass(obj) and not obj == cls:
            return issubclass(obj, cls)
    return parent_check

module_name = 'myforms'
forms = {}

[forms.update({cls_name: cls})\
      for cls_name, cls in getmembers(sys.modules[module_name], check_subclass(ModelForm))] 

def view(request, form_name):
    form = forms.get(form_name, None)

       

24.11.2011, в 20:22, Kamo <bigblogmaker@gmail.com> написал(а):

Подскажите, пожалуйста, как лучше поступить.
в запросе передаются параметры. допустим 
url(r'^(?P<form_name>\w+)/$', 'views.view')


def view(request, form_name):
    '''
    Теперь здесь хотелось бы зарегистрировать (инициализировать) форму. Хотелось бы без getattr с его проверками...
Если нет в django встроенных register или что нибудь подобного, то подскажите какой метод наиболее безболезненный.
    '''

Комментариев нет:

Отправить комментарий