2016-09-24 85 views
-1

我已经给了这个django项目。我一直试图运行它并找出它。我有一个观点:我需要知道这行代码在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

我认为你应该找到写这段代码并殴打他的人。除了代码设计不好之外,使用'globals()'并在最后返回一个空的响应使得逻辑更加糟糕。你可以通过打印'globals()'开始调试,看看里面有什么。 – ozgur

+0

已经做到了,它和无穷无尽的名单......好全局:D ......我不明白的是该行的格式。括号是做什么的? – Mani

+0

globals()的结果是字典。在该词典中查找viewname会返回一个函数。括号使用提供的参数调用该函数。 –

回答

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

globals()给你全局变量的词典。 然后用[viewName]它引用特定的全局变量,名称匹配值为viewName参数。 并希望它的一个功能,所以它与这些参数调用。

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

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

+0

非常感谢。 – Mani