2015-12-08 79 views
1

試圖用Django製作一個表單並使用HttpResponseRedirect,但我認爲這應該相當容易,但是我似乎做錯了什麼。Django HttpResponseRedirect,它返回None而不是

我不斷收到一個錯誤:

The view hotel.views.hotel_registration didn't return an HttpResponse object. It returned None instead. 

在這種情況下,我的猜測是,HttpResponseRedirect不能正常工作,因爲當我刪除if語句的內容一切正常,但我可以不要提交表格。

我有2次:

def hotel_registration(request): 
    if request.method == 'POST': 
     form = HotelRegistrationForm(request.POST) 
     if form.is_valid(): 
      return HttpResponseRedirect('hotel:hotel_registered') 

     else: 
      form = HotelRegistrationForm() 

     return render(request, 'hotel/hotel-registration-form.html', {'form': form}) 


def hotel_registered(request): 
    pass 

而在urls.py

url(r'hotel-registratie/', hotel.views.hotel_registration, name='registration'), 
url(r'hotel-geregistreerd/', hotel.views.hotel_registered, name='registered'), 

這些是我在HttpResponseRedirect中使用的所有參數:

HttpResponseRedirect('hotel:hotel_registered') 
HttpResponseRedirect('hotel_registered') 
HttpResponseRedirect('/hotel_registered/') 
HttpResponseRedirect(hotel_registered) 

然後我生鏽想要重定向回根:

HttpResponseRedirect('/') 

並採用反向:

HttpResponseRedirect(reverse(hotel_registration)) 
HttpResponseRedirect(reverse('hotel_registration')) 

什麼是做到這一點的正確方法?

+0

我很難搞清楚你確切的問題/問題,但我可以看到你的視圖將返回的位置無:當它使用GET方法調用時。您應該嘗試減少最終返回語句的縮進級別。 –

+0

@JoeyWilhelm就是這樣。 –

回答

1

根據以下urls.py您發佈:

url(r'hotel-registratie/', hotel.views.hotel_registration, name='registration'), 
url(r'hotel-geregistreerd/', hotel.views.hotel_registered, name='registered'), 

你應該使用下列方法之一重定向:

return HttpResponseRedirect('hotel-geregistreerd/') 

return HttpResponseRedirect(reverse('registered')) 

或只需

return redirect('registered') 

當您使用HttpResponseRedirect提供url的路徑時,如果您使用反向或重定向,則可以使用您在urls.py中定義的名稱。

+0

不要忘記在使用它們之前,用'from django.shortcuts import redirect'和'from django.urls import reverse'導入反向和重定向 – DarkCygnus

相關問題