加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django – 使用HttpResponseRedirect,但浏览器没有显示正确的URL

发布时间:2020-12-20 13:36:45 所属栏目:Python 来源:网络整理
导读:我有一个视图,接受用户的输入和成功的帖子,它重定向到另一个页面.这与教程中的代码完全相同: def quex(request,id,question_number): next_question = int(question_number) + 1 if request.method == 'POST': # If the form has been submitted... form =
我有一个视图,接受用户的输入和成功的帖子,它重定向到另一个页面.这与教程中的代码完全相同:

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上的Browser Khmer显示的网址为http://foo.com/quex/u0026lt;idu0026gt;/1/#/quex/u0026lt;idu0026gt;/2/.

解决方法

没有测试,但是:

urls.py

urlpatterns = patterns('',# others omitted
    url(r'^quex/(?P<identifier>w{8})/(?P<question_number>d+)/$','screening.views.quex',name='quex-view'),)

views.py

from django.core.urlresolvers import reverse_lazy


def quex(request,identifier,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

            response_url = reverse_lazy('quex-view',kwargs={'identifier':identifier,'question_number':next_question})
            return HttpResponseRedirect(reponse_url) 
    else:
        form = QuestionForm() # An unbound form

    return render_to_response('questionnaire.html','identifier' : identifier,RequestContext(request)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读