Django перенаправления - как обрабатывать перенаправления при использовании ajax - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно вернуть редирект (url) или что-то в этом роде в django и заставить шаблон сделать этот URL.

Вместо этого мне возвращается html-код шаблона, когда требуется ТОЧНО перенаправление.Есть идеи?Теперь мне нужно написать перенаправление в шаблонах window.location='url', это работает, но делает код запутанным.

django.__version__ == '2.0.1'

Мне нужен текст django, который похож на javascript window.location='myurl' Часть представления

@csrf_exempt
def CheckState(request):
    ...
    try:
        ... if (condition):
        a =  redirect('/mypage/')
        ...
        return a #redirect('http://localhost:port/mypage/')

часть шаблона (js.code)

$(document).ready(function() {
    $.get('/my/CheckState/', {})
        .success(function(data){
            console.log(data); 
//window.location = 'url' works here, otherwice no redirect! 
//In console i see html-code of 'http://localhost:port/mypage/'
            })
            .error(function(xhr, textStatus, errorThrown){
                console.log(xhr.responseText);
            })

- комментарий -

 a._headers = {'content-type': ('Content-Type': 'text/html; charset=utf-8'),
    'location' : ('Location', '/mypage' )}

Я видел этот заголовок, прежде чем задал вопрос, но проблема существует - прыжок не выполняется,Почему это redirect не работает?

1 Ответ

0 голосов
/ 14 ноября 2018

Невозможно помешать $.get() (который использует Xmlhttprequest) следовать перенаправлению. См. Этот вопрос для объяснения.

Возможно, вы сможете использовать fetch API, который позволяет предотвращать перенаправления.

Если вы не можете этого сделать, вы можете изменить представление так, чтобы оно возвращало новый URL-адрес в ответе

from django.http import JsonResponse

def CheckState(request):
    return JsonResponse({'status': 'redirect', 'url': '/new/url/'}) 
   ...

Затем в вашем обработчике ajax проверьте ответ для перенаправления status =, и, если это так, установите window.location для URL.

...