2012-11-02 56 views
1

我正在構建一個將主題與問題連接起來的網站。每個問題都與一個主題相關聯,每個問題都回答一個問題,等等。在主頁上,我點擊一個主題,然後將我帶到基於topic_id的動態網址。如何在Django的jQuery發佈之後渲染前一頁

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 = "Ask Question"  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不允許我將變量放入它中。我如何回到同一頁面?

回答

2

HttpResponseRedirect需要一個字符串(在這種情況下是URL),但是您可以即時構建它。例如:

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

真棒,謝謝! –

2

是的,你可以把一個變量在HttpResponseRedirect,但作爲一個字符串,像這樣:

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

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

此外,使用反向嘗試使用網址別名

或者Django的快捷方式redirect()

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

你能試試嗎?

#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)) 
+0

謝謝,試過這個變化,它的工作! –