2015-12-08 3 views
1

Пытаясь сделать форму с Django и используя HttpResponseRedirect, я ожидал, что это должно быть довольно легко, однако я, кажется, что-то делаю неправильно.Django HttpResponseRedirect, он вернулся Нет вместо

Я получаю сообщение об ошибке:

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

У меня возникли проблемы с выяснением вашего точного вопроса/проблемы, но я вижу, где будет отображаться ваше представление None: Когда он вызывается методом 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

Смежные вопросы