2016-09-24 84 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