Невозможно передать объект списка SQLAlchemy в функцию обратного вызова jQuery - PullRequest
0 голосов
/ 01 ноября 2018

У меня такое ощущение, что мне здесь не хватает чего-то фундаментального. Я не уверен, что это после нескольких дней поиска в Stack Overflow и Google, но я извиняюсь за то, что навязал это сообществу, если это правда.

Context

У меня есть объект списка SQLAlchemy projects, на который ссылаются через jinja2 в шаблоне фляги. Из шаблона я хочу снова передать список на маршрут /_background_process, используя функцию обратного вызова jQuery для keyup (см. JQuery ниже).

1012 * Conundrum *

Функция обратного вызова работает с зарегистрированным маршрутом при тестировании, когда я передаю простую строку, из которой я могу заключить, что она настроена правильно. Однако, когда я пытаюсь передать список SQLAlchemy, в консоли браузера появляется Uncaught SyntaxError: Unexpected token &, потому что jinja добавляет множество символов & как часть преобразования MarkupSafe.

Некоторые вещи, которые я пробовал

Встроенный фильтр Jinja, safe (на который есть ссылка в документации здесь ), к сожалению, не помогает, поскольку символы < и >, вложенные в объект списка SQLAlchemy, вызывают ту же ошибку Uncaught SyntaxError: Unexpected token <

Преобразование списка в словарь исключает символы <>, но у объекта списка SQLAlchemy, с которым я работаю, слишком много вложенных ветвей, чтобы сделать его практичным, и решения, подобные этому ( link ) эта попытка с циклом не работает, потому что это не список из двух элементов.

Обобщая вопрос

Есть ли способ передать объект списка SQLAlchemy в функцию обратного вызова, которая уже была передана jinja шаблону колбы?

jВопрос в шаблоне колбы

<script type=application/javascript>
    $(function() {
        $('#process_input').on('keyup', function() {
        $.getJSON('/_background_process', {
            userinput: $('input[name="userinput"]').val(),
            projects: {{ projects | safe }}
        }, function(data) {
            $("#result").text(data.result);
        });
        return false;
        });
    });
</script>
...