ユーザーからの入力を受け入れるビューがあり、投稿が成功すると、別のページにリダイレクトされます。チュートリアルのコードとほぼ同じです。
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)
urls.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 のブラウザ クメールhttp://foo.com/quex/<id>/1/#/quex/<id>/2/
では URL が として表示されます。