如何在Django中的jQuery发布后呈现上一页
Posted
技术标签:
【中文标题】如何在Django中的jQuery发布后呈现上一页【英文标题】:How to render previous page after jQuery post in Django 【发布时间】: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 不允许我将变量放入其中。如何返回同一页面?
【问题讨论】:
【参考方案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))
【讨论】:
以上是关于如何在Django中的jQuery发布后呈现上一页的主要内容,如果未能解决你的问题,请参考以下文章