2016-09-24 11 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例外例外を取得するため、5行目が何をするかである:ここ

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()の結果はdictです。そのdictでviewnameを検索すると、関数が返されます。カッコは、指定された引数でその関数を呼び出しています。 –

答えて

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

globals()は、グローバル変数を指定します。 [viewName]を参照して、値がviewNameパラメータと一致する特定のグローバル変数を参照します。 うまくいけばその関数なので、それらのパラメータで呼び出されます。

デザインに関しては、誰かがURLの値に応じて呼び出される関数のリストを作成しようとしました。

これの代わりに、ちょうどこれを行うdjango urlsフレームワークを使用することができます。

+0

ありがとうございました。 – Mani

関連する問題