Django HttpResponseRedirect,它返回 None

Django HttpResponseRedirect, It returned None instead

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

然后我 rust 想重定向回 root:

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.

中定义的名称