Как отрисовать шаблон Django после ajax-вызова
Я создаю приложение, которое отображает группу карточек на основе опций, на которые нажимает пользователь,
Я использую ajax при нажатии на опцию, так что карточки появляются без перезагрузки страницы, но проблема в том, что я не могу отобразить карточки на странице, я передаю вычисленные значения во фронтенд как контекст django, используя return render(request,'base.html',{'context':context})
Ajax:
<script>
function sendData(date){
$.ajax({
type : "POST",
url: "",
data: {
date : date,
csrfmiddlewaretoken:'{{ csrf_token }}',
click:'click'
},
});
return false;
}
</script>
view.py:
def datepicker(request):
if 'click' in request.POST:
return render(request,'datepicker.html',{'dates':availabe_dates,'time':time})
return render(request,'datepicker.html',{'dates':availabe_dates,'time':['choose a date']})
Я пробовал давать:
<div class="card-body">
{% for t in time %}
<p>{{t}}</p>
{% endfor %}
</div>
Вместо карточек отображается только choose a date
. Я уверен, что if 'click' in request.POST:
выполняется, поскольку я пробовал давать некоторые операторы печати
Помогите пожалуйста, так как я новичок в Ajax и Django
Первый метод:
Вы можете вернуть словарь в качестве ответа и заполнить его в jQuery следующим образом:
from django.http import JsonResponse
def datepicker(request):
if 'click' in request.POST:
return JsonResponse({'dates':availabe_dates,'time':time})
и в ajax success:
<script>
function sendData(date){
$.ajax({
// rest of the code
success: function(response){
$.each(response.time, function (t) {
$(".card-body").append(t);
});
}
});
return false;
}
</script>
Второй метод:
Вы можете вернуть html из представления и добавить это в метод успеха ajax следующим образом:
from django.http import JsonResponse
from django.template.loader import render_to_string
def datepicker(request):
if 'click' in request.POST:
html = render_to_string('datepicker.html', {'dates':availabe_dates,'time':time})
return JsonResponse(html, safe=False)
и в ajax:
<script>
function sendData(date){
$.ajax({
// rest of the code
success: function(response){
$(".card-body").html(response);
}
});
return false;
}
</script>