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


什么是正确的方法?

最佳答案

根据您发布的以下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中定义的名称。

07-24 09:52