Использование тегов шаблонов Django в ответ на ajax

Я использую Ajax для обновления списка объектов, скажем, при каждом нажатии на кнопку. Но я хочу использовать теги шаблона Django для создания каждого элемента списка. Проблема в том, что мне нужно отправить JsonResponse обратно в JavaScript, но там я не могу использовать эти теги.

Мне нужно отправить атрибуты объекта как json. и я застрял с обычным html в Ajax:

...
success: function (json) {
    if (json.new_messages.length) {
        for (let m of json.new_messages) {
            $('#messages-list').append("<li>"+m.sender_name+" "+m.content+"</li>");
        }
    }
},

Один из способов, который я нашел для решения этой проблемы - это сначала отрисовать шаблон, а затем отправить полученный текст в ответ.

В файл шаблона включите только тот html, который должен быть использован в Ajax. Никаких лишних html-тегов. Здесь вы можете использовать все теги и фильтры Django. Например:

{% for m in messages_list %}
    <li>
    <b>{{ m.sender.profile.get_short_name }}</b>
    ({{ m.send_time|time:"H:i" }}):
    {{ m.content }}
    {% if m.sender == user %}
        {% if m.is_seen %}
            <b><small>✓✓</small></b>
        {% else %}
            <b><small>✓</small></b>
        {% endif %}
    {% endif %}
    </li>
{% empty %}
    <li>No messages here yet...</li>
{% endfor %}

В представлении, используя функцию render_to_string, отрисуйте шаблон и отправьте его в контексте json-ответа:

response = render_to_string("just_list.html", context={"messages_list": new_messages})
return JsonResponse({"messages": response})

Тогда его можно легко использовать в Ajax:

...
success: function (json) {
    $('#messages-list').append(json.messages);
},
Вернуться на верх