2

问题:我如何重定向到 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))

这对我有用!

4

2 回答 2

3

创建一个不同的 URL,该 URL 呈现与您现在重定向到的 URL 相同的视图,但带有一个额外的 GET 参数。您可以使用此 GET 参数来修改用于提供视图的模板。无论哪种方式,重定向都被视为一个新请求,因此您必须执行一些操作才能将此附加信息传递给此请求。

于 2012-06-18T06:55:11.117 回答
1

从请求的回调方法中获取重定向 url 作为 json 数据,然后使用 JavaScript 从页面重定向。

于 2012-06-18T02:48:56.787 回答