Визуализировать HTML-тег Django, используя JavaScript
Я установил в своем проекте django-contib-comments, и у меня есть HTML-код, который отображает список комментариев, а также отображает форму для ввода нового.
Теперь я хочу использовать Ajax для отправки формы без обновления страницы и в случае успеха добавить добавленный комментарий в список.
Я сделал большую часть работы, но я уверен, что должен быть более легкий способ достигнуть этого.
у меня вопрос, есть ли способ для меня визуализировать HTML-тег Django в JavaScript примерно так:
document.getElementById("comments").innerHTML = {% render_comment_list for obj %}
пока это код, который я сделал:
1) Я не хочу ничего менять в проекте django-contrib-comments (я избегаю переопределять методы.
2) Я использовал стандартные теги в django-contrib-comments для отображения списка комментариев.
{% render_comment_list for obj %}
3) Создан JavaScript, который обрабатывает отправку формы, а затем создает новую запись в списке.
function submit_comments(event) {
event.stopPropagation();
$.ajax({
type: $('#comment_form').attr('method'),
url: $('#comment_form').attr('action'),
data: $('#comment_form').serialize(),
cache: false,
dataType: "html",
success: function (html, textStatus) {
var comment_count_btn = document.getElementById('comment-text-vertical-btn');
if (comment_count_btn != null) {
if (!isNaN(parseInt(comment_count_btn.innerHTML))) {
comment_count_btn.innerHTML = parseInt(comment_count_btn.innerHTML) + 1 + " Comments";
}
}
var comment_count_head = document.getElementById('kapua-comments-header');
if (comment_count_head != null) {
if (!isNaN(parseInt(comment_count_head.innerHTML))) {
comment_count_head.innerHTML = parseInt(comment_count_head.innerHTML) + 1 + " Comments:";
}
}
if (document.getElementById("comments") != null){
submitted_timestamp = getQueryParameter("timestamp", this.data);
submitted_date = new Date();
if (submitted_timestamp == null) {
submitted_date = new Date(submitted_timestamp);
}
submitted_comment = getQueryParameter("comment", this.data);
if (submitted_comment == null) {
submitted_comment = "No value entered"
}
html_comment = "<div class=\"right-aligned\"><div class=\"comment-date\">" + submitted_date + " - " + "</div>" + submitted_comment + "</div><br><br>";
current_html = document.getElementById("comments").innerHTML;
document.getElementById("comments").innerHTML = html_comment + current_html;
}
if (document.getElementById("comment_form") != null){
document.getElementById("comment_form").reset();
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
$('#comment_form').replaceWith('Your comment was unable to be posted at this time. We apologise for the inconvenience.');
}
});
return false;
};
Заранее спасибо
1 ответ
Да, есть путь в Джанго, Вы можете использовать [escape][1]
визуализировать тег HTML. Вот простой пример -
from django.utils.html import escape
def example(request):
return "%s<div><i>%s</i></div>" % (escape(text), escape(other_text)
Для более подробного объяснения вы можете обратиться к документации.
https://docs.djangoproject.com/en/2.1/ref/utils/
Все еще есть какие-либо сомнения прокомментировать это.