2009-09-24 19 views
0

後,我有,看起來像一個Django視圖...Django的視圖函數的代碼運行回報

 
    def add_user(request): 
     if User.objects.get(username__exact = request.POST['username']): 
      context = { 'message': "Username already taken"} 
      return render_to_response("mytemplate.html", context, RequestContext(request)) 

     newUser = User(username="freeandclearusername") 
     newUser.save() 

     #then other code that is related to setting up a new user. 

是關係到如果初始條件語句失敗,並設置甚至是猶然用戶的其他代碼「返回render_to_response()」被調用。

使用正確的上下文呈現頁面,但在初始返回後將其他信息添加到數據庫。我認爲「return render_to_response()」之後的代碼不會運行。

任何人都可以證實或解釋這個?

UPDATE ....

好了,所以如果我添加一個條件....

def add_user(request): 
    if User.objects.get(username__exact = request.POST['username']): 
     bad_user = True 
     context = { 'message': "Username already taken"} 
     return render_to_response("mytemplate.html", context, RequestContext(request)) 

    newUser = User(username="freeandclearusername") 
    newUser.save() 

    if bad_user != True: 
     #then other code that is related to setting up a new user. 
     context = { 'message': "Username is great!!!!!"} 
     return render_to_response("mytemplate.html", context, RequestContext(request)) 

此行爲與預期相同。此外,如果我刪除RequestConext(),它似乎也正確行事。

任何想法?我認爲問題在於我如何使用RequestContext。

+0

通常需要的RequestContext作爲關鍵字的說法,叫做 「context_instance」,即 選擇render_to_response( 「mytemplate.html」,背景,context_instance = RequestContext的(要求)) 但我不馬上看到,將如何影響你的代碼執行... – 2009-09-24 21:57:07

回答

1

return語句確實會終止函數。所以,如果你看到其他的代碼被執行,你要麼

  • 不執行return語句,從而產生輸出以某種方式不同,或
  • 有其他代碼(在函數調用之前,或在中間件),使數據庫發生變化。
0

你是對的,假設你的條件得到滿足,視圖將退出你的return語句。我能想到的唯一的其他事情還沒有被提及是縮進 - 仔細檢查你沒有混合的製表符和空格。這有時會導致意外情況。

選擇render_to_response