【问题标题】:How to dynamically load a Django class如何动态加载 Django 类
【发布时间】:2015-09-04 21:00:10
【问题描述】:

从数据库中我有一个文本,它必须动态加载我的视图类。

我现在的例子是:

-projectname
    -appname
        -views.py
        -templates
            -appname
                -index.html

在views.py中

class SelectCampaign(View):

    def get(self, request, *args, **kwargs):

        campaign = Campaign.objects.values('campaign_name').filter(user=request.user)[0]

        #this is where I need you to automatically load with varying campaign
        generic_class = MyClassCampaignName1() 
        #example: generic_class = class called MyClassCampaignName1

        return generic_class.render_index(request)

class MyClassCampaignName1():

    def render_index(self, request, *args, **kwargs):
        return render(request, 'appname/index.html', {}, context_instance=RequestContext(request))

使数据库动态加载同名类的名称

【问题讨论】:

标签: python django class load


【解决方案1】:

这里有几种方法可以从字符串名称中获取对象。我最喜欢getattr

# outside.py
class OuterDummy():
    def __init__(self):
        print 'This is outer Dummy!'

# main.py
class InnerDummy():
    def __init__(self):
        print 'This is inner Dummy!'

if __name__ == "__main__":
    # Method 1) Use the globals object
    class_1 = globals().get('InnerDummy')
    instance_1 = class_1()
    # stdout: This is inner Dummy!

    # Method 2) Use getattr
    import outside
    class_2 = getattr(outside, 'OuterDummy')
    instance_2 = class_2()
    # stdout: This is outer Dummy!

python main.py

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2014-09-27
    • 2021-02-08
    • 2012-10-10
    相关资源
    最近更新 更多