我已完成大部分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中与此相关:
当我使用jinja2时,我最终会遇到不同的错误:
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);
}
如何解决此问题(最好使用Jinja2)输出图表?