Как вывести возврат Django Ajax в виде данных шаблона?
Я хочу вывести Products данные, возвращаемые следующими представлениями в шаблоне. Когда я проверяю контекст, он печатает правильные данные, но когда я пытаюсь напечатать данные в шаблоне, он ничего не показывает. Я проверил Networks в консоли браузера, данные вызываются там, но я не знаю, почему они не печатаются в представлениях
Шаблон
{% for product in products%}
{{product.name}}
{%endfor%}
Мой Ajax:
$(document).ready(function() {
var compare = localStorage.getItem("comparisionItems");
var compareObj = JSON.parse(compare);
console.log(compareObj)
$.ajax({
url: './compare',
type: "POST",
data: compare,
headers: { "X-CSRFToken": $.cookie("csrftoken") },
dataType: "json",
contentType : "application/json",
processData: "false",
success: function (data) {
location.reload();
},
});
});
Views.py
def compare(request):
is_ajax = request.headers.get('X-Requested-With') == 'XMLHttpRequest'
if is_ajax and request.method == "POST":
data = json.loads(request.body)
compare_ids = data['itemIds']
products = Products.objects.filter(id__in=compare_ids)
print(products)
context={'products':products}
return render(request,'./compare.html', context)
else:
return render(request,'./compare.html')
QuerySets являются ленивыми!
Когда вы вызываете функцию print(), продукты queryset оцениваются немедленно
Вы можете использовать all(), чтобы он оценивался в вашем шаблоне:
products = Products.objects.filter(id__in=compare_ids).all()
Также взгляните на это documentions