fatiherikli

özellikle settings.py'de backend ya da middleware tanımlarında görmüşsünüzdür. bu teknik design patterns listelerinde Backend, Backend Interface şeklinde geçmekte. bugün böyle bir şey lazım oldu. django'nun kodunu inceledim ve ufak bir helper fonksiyon yazıverdim.

örnek olarak setting.py'nizde şöyle bir tanımınız var;

SPIDER_BACKEND = "fgame.game.backends.GameSpiderBackEnd"

bunu class'ı şu fonksiyon ile kullanabilirsiniz.

def import_class(class_path):
    from django.utils.importlib import import_module
    module_name = '.'.join(class_path.split(".")[:-1])
    mod = import_module(module_name)
    return getattr(mod, class_path.split(".")[-1])

şöyle de bir örnek yapalım;

from django.conf import settings  
klass = import_class(settings.SPIDER_BACKEND)  
instance = klass()
comments powered by Disqus