2016-12-21 1 views
1

내 웹 사이트의 기본 페이지 상단에 여러 개의 버튼이 있습니다. 이 버튼들 중 하나가 눌려지면 get 요청이 django view로 보내지며, 이것은 리디렉션되고 django 모델의 쿼리 세트는 필터링되어 웹 페이지에 표시됩니다. 터미널에서 요청이 제대로 리디렉션된다고 말하면서 내 아약스가 작동하는 것을 알고 있습니다. 리다이렉트하는 기능도 매우 간단하고 오류가 발생하지 않았기 때문에 작동하는 것처럼 보입니다. 그러나 내 견해는 동일하게 유지되며 왜 그런지 잘 모르겠습니다.Ajax 리디렉션 후 장고보기가 렌더링되지 않습니다.

urls.py

url(r'ajax_filter/', views.ajax_filter, name='ajax_filter'), 
url(r'filter=(\w+)/$', views.filtered_index, name='filtered_index'), 

views.py

def filtered_index(request, filter): 
    clothes = Clothes_Item.objects.filter(gender=filter) 
    if request.user.is_authenticated(): 
     favorite_clothes_ids = get_favorite_clothes_ids(request) 
     return render(request, 'test.html', {'clothes': clothes, 'favorite_clothes_ids': favorite_clothes_ids}) 
    else: 
     return render(request, 'test.html', {'clothes': clothes, }) 

def ajax_filter(request): 
    if request.is_ajax(): 
     gender_filter = request.GET.get('gender_filter') #filter type 
     if gender_filter is not None: 
      return HttpResponseRedirect(reverse('filtered_index', args=[gender_filter])) 
    return HttpResponse('') 

답변

7

당신은 장고 귀하의 경우 재 사용할 수 없습니다. ajax 요청을 보내면 일반적으로 json 응답을 기대할 수 있으며이를 기반으로 사용자는 JavaScript 코드를 통해 사용자를 리디렉션 할 수 있습니다. , JS에서

from django.http import JsonResponse 

def ajax_filter(request): 
    if request.is_ajax(): 
     gender_filter = request.GET.get('gender_filter') #filter type 
     if gender_filter is not None: 
      return JsonResponse({ 
       'success': True, 
       'url': reverse('filtered_index', args=[gender_filter]), 
      }) 
    return JsonResponse({ 'success': False }) 

: 여기

$.ajax({ 
    // You send your request here 
}).done(function(data) { 
    // You can handle your redirection here 
}); 

당신이, 당신은 당신이 가고 싶은 다음 페이지에 장고에서 다시 JsonResponse을 통과하여 설치를 리디렉션을 처리 할 수있는 방법입니다 당신은 window.location.href를 사용하여 다시 전달 JsonResponse에서 URL을 잡고 그 URL로 리디렉션 완료 (또는 성공) 함수를 사용

$.ajax({ 
    // You send your request here 
}).done(function (data) { 
    if (data.success) { 
     window.location.href = data.url; 
    }  
}); 
+0

위에서 작성한 코드의 두 번째 부분에서 리디렉션을 어떻게 처리해야합니까? –

+0

보기에서 JsonResponse를 반환하고 리디렉션 할 다음 URL을 반환하십시오. 자바 스크립트에서 window.location.href를 사용하여 클라이언트에서 리디렉션을 수행합니다. – 2ps

+0

@ 2ps가 언급 된대로'window.location.href = your_url'을 사용할 수 있습니다. – ettanany

관련 문제