визуализировать HTML-тег Django, используя JavaScript - PullRequest
0 голосов
/ 10 октября 2018

Я установил в свой проект 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 Ответ

0 голосов
/ 10 октября 2018

Да, в django есть способ. Вы можете использовать [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/#django.utils.html.escape

Все еще есть какие-либо сомнения, закомментируйте это.

...