Представление Django не перенаправляет при запросе jQuery.post () - PullRequest
2 голосов
/ 26 января 2010

В моем шаблоне Django есть меню для переключения языков. Я вызываю через POST вид «/ i18n / setlang /», показанный ниже, чтобы изменить настройку языка. Когда я использую HTML-форму, пользователь перенаправляется, как и ожидалось, но когда я использую jQuery.post (), это не так.

Что мне не хватает?

Спасибо

Вызов представления с использованием jQuery.post ():

$.post("/i18n/setlang/", { language: 'en', next: "{{request.path}}" });

Вид выглядит следующим образом:

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

Ответы [ 4 ]

5 голосов
/ 25 февраля 2010

Вам не нужен 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>

...

<script type="text/javascript" src="/static/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
    function setLang(lang){
        $('#langForm select').val(lang); 
        $('#langForm').submit();
        return false;
    }
</script>
2 голосов
/ 26 января 2010

Чего вы ожидаете? Сообщение AJAX будет перенаправлено, как вы ожидаете, но сама страница не будет. Если вы хотите, чтобы сама страница была перенаправлена, почему вы используете AJAX?

0 голосов
/ 16 мая 2012

Посмотрите на это .

Это решение вашей проблемы! ;)

Вот это резюме:

Ситуация: есть метод представления, вызываемый 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))
0 голосов
/ 26 января 2010

Я наконец делаю перенаправление в javascript:

$.post("/i18n/setlang/", { language: $(this).text(), next: "{{request.path}}" }, function(data) {
    top.location.href="{{request.path}}"; //redirection
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...