尝试使用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中定义的名称。