Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery.post()请求时,Django视图不重定向_Jquery_Django_Post_Redirect - Fatal编程技术网

jQuery.post()请求时,Django视图不重定向

jQuery.post()请求时,Django视图不重定向,jquery,django,post,redirect,Jquery,Django,Post,Redirect,我在Django模板中有一个切换语言的菜单。我通过POST调用下面显示的“/i18n/setlang/”视图来更改语言设置。当我使用html表单时,会按预期重定向用户,但当我使用jQuery.post()时,情况并非如此 我错过了什么 谢谢 使用jQuery.post()调用视图: 观点如下: def set_language(request): """ Redirect to a given url while setting the chosen language in th

我在Django模板中有一个切换语言的菜单。我通过POST调用下面显示的“/i18n/setlang/”视图来更改语言设置。当我使用html表单时,会按预期重定向用户,但当我使用jQuery.post()时,情况并非如此

我错过了什么

谢谢

使用jQuery.post()调用视图:

观点如下:

def set_language(request):
    """
    Redirect to a given url while setting the chosen language in the
    session or cookie. The url and the language code need to be
    specified in the request parameters.

    Since this view changes how the user will see the rest of the site, it must
    only be accessed as a POST request. If called as a GET request, it will
    redirect to the page in the request (the 'next' parameter) without changing
    any state.
    """
    next = request.REQUEST.get('next', None)

    if not next:
        next = request.META.get('HTTP_REFERER', None)
    if not next:
        next = '/'
    response = http.HttpResponseRedirect(next)
    if request.method == 'POST':
        lang_code = request.POST.get('language', None)
        if lang_code and check_for_language(lang_code):
            if hasattr(request, 'session'):
                request.session['django_language'] = lang_code
            else:
                response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)    
    return response

你期望发生什么?AJAX帖子将按照您的预期被重定向,但页面本身不会。如果要重定向页面本身,为什么要使用AJAX?

我终于用javascript重定向了:

$.post("/i18n/setlang/", { language: $(this).text(), next: "{{request.path}}" }, function(data) {
    top.location.href="{{request.path}}"; //redirection
});

您不需要ajax。只需使用javascript提交表单。您可以隐藏表单

<a href="#" onclick="setLang('tr');">
    <img src="/static/images/l2.png" alt="Türkçe" />
</a>
<a href="#" onclick="setLang('en');">
    <img src="/static/images/l1.png"  alt="English" />
</a>
<form id="langForm" action="/i18n/setlang/" method="post" style="display:none;">
    <select name="language">
        <option value="tr">Türkçe</option>
        <option value="en">English</option>
    </select>
</form>

蒂尔克çe
英语


函数setLang(lang){
$('#langForm select').val(lang);
$('#langForm')。提交();
返回false;
}
看看

这是你问题的解决办法!;)

以下是总结:

情况: jQUery.ajax()调用了一个视图的方法

为了在Ajax之后重定向,我使用了找到的提示

但是,我还需要做进一步的手术

在被调用视图中,调用另一个方法,如下所示:

[...]
if request.method == 'POST':
    if "obj" in request.POST: #ricevuti dati da ajax
        request.session['qual'] = request.POST['obj']
        return HttpResponseRedirect(reverse("xenopatients.views.qualReport"))
我保存会话中需要的数据。我在被调用的视图中使用这些数据

调用另一个方法,这是重定向浏览器页面的关键。 事实上,在被调用方法的末尾,您通常可以编写并执行:

return render_to_response('measure/qualReport.html', {'name':name, 'list_report': report, 'message':'Measures correctly saved'}, RequestContext(request))

我还能用什么?Javascript?我不想用一种形式在风格上有更多的自由。我用javascript重定向解决了这个问题,如我的第二篇文章所示。@jul:当使用表单时,你的“风格自由”受到了多大的限制?Ajax在您的情况下没有任何意义,因为您在任何情况下都在重定向用户,不需要这种“开销”。
[...]
if request.method == 'POST':
    if "obj" in request.POST: #ricevuti dati da ajax
        request.session['qual'] = request.POST['obj']
        return HttpResponseRedirect(reverse("xenopatients.views.qualReport"))
return render_to_response('measure/qualReport.html', {'name':name, 'list_report': report, 'message':'Measures correctly saved'}, RequestContext(request))