Yang 코딩 공부

Django [tip] ajax통신하여 html 파일을 랜더링하기. 본문

Django/tip

Django [tip] ajax통신하여 html 파일을 랜더링하기.

코딩하는 Yang 2022. 6. 17. 14:30

Djnago를 통해 작업을 하다보니 templete를 랜더링하게 될 때 hmtl 코드를 동적으로 추가하거나 삭제하는 부분들이 있었다. 그럴 때 마다 ajax 통신 후 받은 Json 값을 이용해 동적으로 추가하였는데 이때 Django는 모델에서 외래키로 이뤄진 객체는 ajax로 전달하지 못함을 알게되었고 Django에서 전달할때 일일이 객체안의 내용을 담아서 따로 보내야했었다.

이를 해결하기 위해 html을 랜더링하여 ajax에 보낼 수는 없을까? 하고 찾던 도중 알게된 방법이다.

 

function request_get_ajax(address){
    $.ajax({
        url: 'Your url',
        type: 'GET',
        data: {
            'your data'
        },
        success:setPostAjax,
        dataType: 'html',
        	error: function (e) {
        }
    })
}
        
function setPostAjax(data, textStatus, jqXHR) {
	$('.temp').append(data);
}

위에서 중요한 부분은 dataType 인데 'html'로 해야 해당 통신한 후 받은 데이터를 인식하고 이를 문자열로 바꿔준다.

그 후 통신이 성공적일시 setPostAjax를 실행. -> 원하는 장소에 data를 삽입해준다.

 Django 에서는 원하는 html 파일을 context와 함께 render 함수를 통해 보내면 된다. 아래와 같다.

 

from django.http import HttpResponseBadRequest
from django.shortcuts import render

def temp_function(request):
	if request.method == "GET" and is_ajax:
    	temo_obj = models.Temp.objects.first()
    	return render(request, "temp_for_ajax.html")
    else:
    	"""
        	비정상적인 접근
 		"""
        return HttpResponseBadRequest("비정상적인 접근입니다",format(request.method),status=405)