Django HttpResponseRedirect,它返回None

时间:2015-12-08 19:49:18

标签: python django httpresponse

尝试使用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)

然后我生锈了想重定向回root:

HttpResponseRedirect('/')

使用反向:

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

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

根据您发布的以下urls.py:

n_sentence, n_element

您应该使用以下方法之一进行重定向:

sorted

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

或只是

return HttpResponseRedirect('hotel-geregistreerd/')

当您使用HttpResponseRedirect提供网址的路径时,如果您使用反向或重定向,则可以使用您在urls.py中定义的名称。