我有一个接受用户输入的视图,并且在成功发布后,它会重定向到另一个页面。教程中的代码几乎相同:
def quex(request, id, question_number):
next_question = int(question_number) + 1
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/quex/' + id + '/' + str(next_question))
else:
form = QuestionForm() # An unbound form
return render_to_response('questionnaire.html', {
'form': form,
'id' : id,
'question_number' : question_number},
RequestContext(request)
网址.py
urlpatterns = patterns('',
url(r'^$', 'django.contrib.auth.views.login'),
url(r'^logout$', 'screening.views.logout_view'),
url(r'^home/$', 'screening.views.home'),
url(r'^quex/new/$', 'screening.views.new_quex'),
# others omitted
url(r'^quex/(?P<identifier>\w{8})/(?P<question_number>\d+)/', 'screening.views.quex'),
)
该代码似乎可以正常工作并且页面行为正确。
我的问题是客户端中出现的 URL 没有正确更新。原始页面是http://foo.com/questionnaire/ /1/,重定向页面是 http://foo.com/questionnaire/ /2/。即使在重定向之后,旧 URL 仍会继续显示在浏览器的地址栏中。
服务器状态消息看起来不错:
[19/Aug/2013 19:15:40] "GET /quex/P54C9UCS/1/ HTTP/1.1" 200 3225
[19/Aug/2013 19:15:44] "POST /quex/P54C9UCS/1/ HTTP/1.1" 302 0
[19/Aug/2013 19:15:44] "GET /quex/P54C9UCS/2/ HTTP/1.1" 200 3206
我究竟做错了什么?如何让浏览器显示正确的 URL?
编辑:我做了更多的测试。Chrome、Safari(在 OS X 和 iOS 上)和 Firefox 显示上述 URL。但是iOS 上的Browser Khmer将 url 显示为http://foo.com/quex/<id>/1/#/quex/<id>/2/
.