问题:我如何重定向到 django 中的页面,但将其“伪造”为 ajax 请求?
所以我有一个发布数据请求 - 通过 ajax (jQuery) 完成。这被发送到我的 django 服务器,该服务器添加数据(或删除它!),然后以“做得好,您添加了一些数据”页面进行响应。
这个成功页面的开头是:
{% extends request.is_ajax|yesno:"base_ajax.htm,base.htm" %}
如果请求不是 ajax 请求,这是添加各种标头的好方法,如果是则忽略标头。我添加了这个,所以该网站在使用和不使用 javascript 的情况下都可以工作(我们需要再这样做吗?)
然后我添加了一个 post-redirect-get (也就是说,视图的 post 部分不是return render_to_response
,而是return redirect('url here')
现在的问题是重定向忘记了初始请求是一个ajax请求。所以我总是最终将整个页面 - 标题和所有 - 加载到一个 div 中,这不是我想要的。
所以,我希望能够告诉重定向它应该假装是一个 ajax 请求
我怎么做?
更新:对于在“未来(使用喷气背包!)”中阅读此内容的任何人,重定向不会携带标头信息 - 请参阅https://www.rfc-editor.org/rfc/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))
这对我有用!