使用GAE渲染或Jinja2模板输出bigquery数据的模板问题

时间:2016-11-03 01:24:27

标签: javascript python google-app-engine jinja2

我已完成大部分Codelab: Creating a BigQuery Dashboard。但是,我遇到了似乎无法解决的模板问题。

的Python:

import jinja2
from google.appengine.ext.webapp.template import render 

JINJA_ENVIRONMENT = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True)

def query(self):
    ....
    response = service.jobs().query(projectId=projectId, body=query).execute()
    return response

def _bq2geo(self, bqdata):
    logging.info(bqdata)
    table = Table()

    column1 = bqdata['schema']['fields'][0]['name']
    column2 = bqdata['schema']['fields'][1]['name']

    table.add_column(column1, str, column1)
    table.add_column(column2, int, column2)

    for row in bqdata['rows']:
        table.append([str(row['f'][0]['v']), int(row['f'][1]['v'])])
    return encode(table)

def get(self):
    data = self.query()
    mydata = self._bq2geo(data)

    template = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(render(template, json.dumps(mydata)))

最后两行导致:

  

未捕获的SyntaxError:意外的标记%

我确信在我的JavaScript中与此相关:

JavaScript not accepting autoescape

当我使用时,我最终会遇到不同的错误:

 template = JINJA_ENVIRONMENT.get_template('index.html')
 self.response.out.write(template.render(json.dumps(mydata)))
  

ValueError:字典更新序列元素#0的长度为1; 2是必需的

我正在关注Generating Dynamic Content from Templates所以我不明白为什么我需要传递2个元素。

HTML:

<link rel="stylesheet" type="text/css" href="style/style.css">
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type="text/javascript" src="script/script.js"></script>

<body>
    <div id="chart"></div>
</body>

JavaScript的:

google.charts.load('current', {'packages' : ['corechart']});
google.charts.setOnLoadCallback(drawChart);

mydata = {% autoescape off %}{{ pydata }}{% endautoescape %}

function drawChart(){
var data = new google.visualization.DataTable(mydata);

var options = {
    hAxis: {
        showTextEvery: 1
    }
};

var chart = new google.visualization.ColumnChart(document.getElementById('chart'));
chart.draw(data, options);
}
  • 期望的结果:在浏览器中查看Google图表
  • 当前结果:屏幕上没有显示任何内容,开发者控制台中显示不同的错误消息(取决于模板方法)

如何解决此问题(最好使用Jinja2)输出图表?

0 个答案:

没有答案