【问题标题】:How to render previous page after jQuery post in Django如何在Django中的jQuery发布后呈现上一页
【发布时间】:2012-10-23 14:47:20
【问题描述】:

我正在构建一个将主题与问题与答案联系起来的网站。每个问题都与一个主题相关联,每个问题都与一个问题相关联,等等。在主页上,我点击一个主题,它会将我带到一个基于 topic_id 的动态 URL。

url(r'^(?P<topic_id>\d+)/$', 'questions'),

当我添加问题时,jQuery 灯箱会在弹出窗口中呈现此 URL

url(r'^(?P<topic_id>\d+)/add_question/$', 'add_question'),

一旦我提交了问题,它就会通过 add_question.html

#add_question.html    
<div class="questionPopupForm">
    <h5><div class="questionPopupTitle"> Add Question</div></h5>
    <form action = "/home/{{ form.topic.id }}/add_question/" method = "post">{% csrf_token %}
        <p>{{ form.as_p }}</p>
        <p><div class="addQuestionButton"><input type = "submit" value = ""     class="btn btn-success" /></div></p>
        <input type = "hidden" name = "next" value = "{{ next|escape }}" />
    </form>
</div>

提交后,Action 会将我带到 /home/{{ form.topic.id }}/add_question,这是上面的 URL,链接到 add_question 视图。

#views.py
def add_question(request, topic_id):
    if request.method == "POST":
        form = QuestionForm(request.POST, request.FILES)
        if form.is_valid():
            question = form.save(user = request.user)
            question.topic = Topic.objects.get(pk = topic_id)
            question.save()
            return HttpResponseRedirect("/home/")
    else:
        form = QuestionForm()
        form.q_author = request.user
        form.movie = Topic.objects.get(pk = topic_id)
    return render_to_response("qanda/add_question.html", {'form': form}, context_instance = RequestContext(request))

现在,返回 HttpResponeRedirect('/home/') 将我带回家。我想做的是将用户重定向回同一页面,但 URL 中有一个变量(/{{ topic.id }}/),但 HttpResponseRedirect 不允许我将变量放入其中。如何返回同一页面?

【问题讨论】:

    标签: jquery python html django url


    【解决方案1】:

    HttpResponseRedirect 需要一个字符串(在本例中为 URL),但您可以即时构建它。例如:

    return HttpResponseRedirect("/%s/" % topic.id)
    

    【讨论】:

      【解决方案2】:

      是的,你可以在HttpResponseRedirect中放一个变量,但是作为一个字符串,像这样:

      return HttpResponseRedirect("/%s/" % topic_id)
      

      另外,尝试使用反向的 url 别名:

      return HttpResponseRedirect(reverse('questions', topic_id=topic_id))
      

      或者 Django 快捷方式redirect()

      from django.shortcuts import redirect
      return redirect('questions', topic_id=topic_id)
      

      【讨论】:

        【解决方案3】:

        你能试试这个吗?

        #views.py
        def add_question(request, topic_id):
            if request.method == "POST":
                form = QuestionForm(request.POST, request.FILES)
                if form.is_valid():
                    question = form.save(user = request.user)
                    question.topic = Topic.objects.get(pk = topic_id)
                    question.save()
                    url = "/home/%s"%(str(topic_id))
                    return HttpResponseRedirect(url)
            else:
                form = QuestionForm()
                form.q_author = request.user
                form.movie = Topic.objects.get(pk = topic_id)
            return render_to_response("qanda/add_question.html", {'form': form}, context_instance = RequestContext(request))
        

        【讨论】:

          猜你喜欢
          • 2021-10-05
          • 1970-01-01
          • 1970-01-01
          • 2020-08-31
          • 2015-07-06
          • 2014-09-07
          • 2017-11-22
          • 2013-12-03
          • 1970-01-01
          相关资源
          最近更新 更多