问题:如何重定向到django中的页面,但将其“假”为ajax请求?
所以我有一个发布数据请求 - 通过ajax(jQuery)完成。这会被发送到我的django服务器,它会添加数据(或删除它!),然后以“做得好,你添加了一些数据”页面进行响应。
此成功页面以:
开头{% extends request.is_ajax|yesno:"base_ajax.htm,base.htm" %}
如果请求不是ajax,那么这是添加各种标头的好方法,如果是,则忽略标头。我添加了这个,所以网站无论是否有javascript(我们还需要这样做吗?)
然后我添加了一个post-redirect-get(也就是说,视图的帖子部分不是return render_to_response
而是return redirect('url here')
现在的问题是重定向会忘记初始请求是ajax。所以我总是把整个页面 - 标题和所有 - 加载到div中,这不是我想要的。
所以,我希望能够告诉重定向它应该假装是一个ajax请求
我该怎么做?
更新:任何人在“未来(使用喷气背包!)”中阅读此内容时,重定向不会带有标题信息 - 请参阅http://tools.ietf.org/html/rfc2616#section-7.1
最后,我去做了这个:
return redirect(self.success_redirect + '/' + str(int(request.is_ajax())))
然后,对于我重定向到我的视图:
url(r'^editStorySuccess/(?P<ajax>\d+)$',
showAfterCheckingAjax,
{
'template':'stories/editStorySuccess.html'
},
'editStorySuccess'
),
并且在showAfterCheckingAjax视图中我刚刚:
if int(ajax):
request.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
return render_to_response(template, {'user':request.user},
context_instance=RequestContext(request))
这对我有用!
答案 0 :(得分:3)
创建一个不同的网址,该网址显示与您重定向到的网址相同的视图,但附加了一个GET参数。您可以使用此GET参数来修改用于为视图提供服务的模板。无论哪种方式,重定向都被视为新请求,因此您必须执行某些操作才能将此附加信息传递给此请求。
答案 1 :(得分:1)
从请求的回调方法获取重定向url作为json数据,然后使用JavaScript从页面重定向。