我需要知道django中这行代码的作用

时间:2016-09-24 06:23:39

标签: django python-2.7 django-views

我得到了这个django项目。我一直试图运行它并弄明白。我有一个观点:

@csrf_exempt
def view(Request,viewName,id):
    print '-------------------start    ' + str(datetime.datetime.now())
    try:
        c = globals()[viewName](viewName, viewName, None, Request, id)
        data = c.render()
        print '-------------------end    ' + str(datetime.datetime.now())
        return data

    except Exception as ex1:
        print '----------------'
        print
        print 'Error in importing View: %s.' % viewName
        print ex1
        print traceback.format_exc()
        print '----------------'
    print '-------------------end    ' + str(datetime.datetime.now())
    return HttpResponse()

我需要知道的是自从我得到KeyError异常后第五行所做的事情:

c = globals()[viewName](viewName, viewName, None, Request, id)

这里是追溯:

2016-09-24 09:42:55+0330 [-] -------------------start    2016-09-24 09:42:55.045115
2016-09-24 09:42:55+0330 [-] ----------------
2016-09-24 09:42:55+0330 [-] 
2016-09-24 09:42:55+0330 [-] Error in importing View: HealthSearchPolicy.
2016-09-24 09:42:55+0330 [-] u'HealthSearchPolicy'
2016-09-24 09:42:55+0330 [-] Traceback (most recent call last):
2016-09-24 09:42:55+0330 [-]   File "/home/shirvani/Desktop/Archive/beasy/views.py", line 167, in view
2016-09-24 09:42:55+0330 [-]     c = globals()[viewName](viewName, viewName, None, Request, id)
2016-09-24 09:42:55+0330 [-] KeyError: u'HealthSearchPolicy'
2016-09-24 09:42:55+0330 [-] 
2016-09-24 09:42:55+0330 [-] ----------------
2016-09-24 09:42:55+0330 [-] -------------------end    2016-09-24 09:42:55.04629

1 个答案:

答案 0 :(得分:1)

c = globals()[viewName](viewName, viewName, None, Request, id)

globals()为您提供全局变量的字典。 然后[viewName]引用名称与viewName参数值匹配的特定全局变量。 希望它是一个函数,所以用这些参数调用它。

至于设计,有人试图根据url中的值创建要调用的函数列表。

而不是所有这些,你可以使用django urls框架来完成这个。