Django.Как вывести переменную с ajax в html
Js:
<script>
var interval
function callAjax(){
$.ajax({
type: "GET",
url: "../row_han_two",
data: {
'id_group': $("#id_group").val(),
},
cache : false,
success: function(data){
rot_message = data
interval = setTimeout(callAjax, 1000);
}
});
}
callAjax()
</script>
views:
from django.shortcuts import render
from django.contrib.auth.models import User,Group
from django.contrib.auth import models
from create_group_handler.models import Parameters_User
from django.contrib.auth.decorators import login_required
from create_group_handler.models import UserProfile
from django.http import HttpResponse, HttpResponseRedirect
from rot.models import Rot_model
from django.http import JsonResponse
import time
@login_required
def row_han_two(request):
rot_message = Rot_model.objects.filter(id_chat = request.GET['id_group'])
return HttpResponse(rot_message)
Скажите, пожалуйста, как вы можете отобразить переменную chat_message в html вот так:
{% for object in rot_message%}
<div class="row">
<div class="col-xl-3 block_messeage">
<span class="span_block_messeage">{{object.name_author}} ,{{object.time_message}}</span>
<br>
{{object.text_message }}
</div>
</div>
{% endfor %}
Подскажите пожалуйста,как это можно сделать,уже неделю через поисковик не могу найти ответа
Ответы (1 шт):
Автор решения: Andrey Maslov
→ Ссылка
самый простой вариант - возвращать не список объектов попадающих под фильтр, а результирующий html
я бы сделал как-то так:
создал шаблон rot_message.html
<div id="rot_message_list">
{% for object in rot_message %}
<div class="row">
<div class="col-xl-3 block_messeage">
<span class="span_block_messeage">{{object.name_author}} ,{{object.time_message}}</span>
<br>
{{object.text_message }}
</div>
</div>
{% endfor %}
</div>
затем во view возвращал бы html на основе этого шаблона
...
from django.template.loader import render_to_string
from django.http import JsonResponse
...
@login_required
def row_han_two(request):
rot_message = Rot_model.objects.filter(id_chat = request.GET['id_group'])
return JsonResponse({"html": render_to_string("rot_message.html", {"rot_message": rot_message})}
и соответственно переделал бы функцию callAjax() что бы она заменяла блок #rot_message_list полученным html
function callAjax(){
$.ajax({
type: "GET",
url: "../row_han_two",
data: {
'id_group': $("#id_group").val(),
},
cache : false,
success: function(data){
rot_message = data.html;
interval = setTimeout(callAjax, 1000);
$('#rot_message_list').replaceWith($(data.html));
},
dataType: "json"
});
}