Правильный способ отправки данных из серверной части в интерфейс с webbapp2? - PullRequest
0 голосов
/ 12 мая 2018

Я учусь и застрял в чем-то, чего не могу понять.

У меня есть простое приложение hello world, созданное с помощью python GAE и webbapp2.

Я хочу отобразить диаграмму на внешнем интерфейсе, используя D3.js

Если я могу отображать некоторые данные непосредственно в разделе HTML моего внешнего интерфейса (<p>{{data}}</p>), я не могу передавать какие-либо данные в теге <script> </script> моего внешнего интерфейса.

Вот MainHandler моего бэк-энда:

MainHandler(webapp2.RequestHandler):
    def get(self):
        data = [{'Letter': 'A', 'Freq': 20  },{'Letter' : 'B','Freq': 12},{'Letter' : 'C','Freq': 47}]
        template_values = {
            'data' : data
        }
        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))

app = webapp2.WSGIApplication([
    ('/', MainHandler),
], debug=True)

В Front-end у меня есть простой console.log({{data}}), который вызывает следующую ошибку Unexpected token &

Полагаю, что-то здесь я не понимаю, но не знаю, что.

1 Ответ

0 голосов
/ 13 мая 2018

Механизм шаблонов экранирует ваши данные, чтобы не допустить путаницы в механизме рендеринга браузера или проблем с безопасностью.Так

[{'Letter': 'A', 'Freq': 20 }]

отображается как

[{&#39;Letter&#39;: &#39;A&#39;, &#39;Freq&#39;: 20}]

или

[{&#quot;Letter&#quot;: &#quot;A&#quot;, &#quot;Freq&#quot;: 20}]

Это сбивает с толку console.log, которая является функцией javascript, которая не знает о выходе из html.

Вы можете переопределить это поведение в Jinja2, используя фильтр safe .

console.log({{ data|safe }})

Обратите внимание, что вы должны переопределять экранирование только на доверенных данных.

...