Jinja2无法理解Raspberry Pi

时间:2015-05-18 22:28:11

标签: python sqlite numpy flask raspberry-pi

我试图在内部网络上运行Raspberry Pi上的基本报告工具。为此,我使用:

  • Raspbian OS
  • 烧瓶(Jinja2)
  • Pandas从缓存值的SQLite数据库中提取(通过pandas.io)
  • Numpy,用于数据聚合。

基本上,我有一个Flask视图,从SQLite表中提取一些日常总计(日期,访问次数,视频播放等),然后通过NumPy按日期聚合数据,将其转换为元组,然后踢它到HTML模板。在HTML模板中,我有一个Jinja过滤器,可以将日期转换为更友好的格式,然后将任何数字转换为逗号分隔格式,以便于阅读。

在我的临时搭历环境(我自己的笔记本电脑-OSX 10.9.5)上完美地工作。但是在Raspberry Pi上运行它 - 通过ssh远程或直接从Pi-Jinja2运行它突然忘记了如何处理数字。在暂存时,Jinja2将numpy.int64类型作为数字处理。在Raspberry Pi上,它表现得像是一种未知格式。

这是我用来将pandas数组转换为元组的代码:

data_set = [tuple(x) for x in grand_total.to_records(index = False)]

这是我用来处理日期的Jinja模板过滤器。我添加了一个额外的elif来将numpy.int64转换为int,但它仍然没有用。

@app.template_filter('DateFormattr')
def DateFormattr(PossDate):
  if(isinstance(PossDate, numpy.datetime64)):
    PossDate = pandas.to_datetime(PossDate)
    PossDate.date().strftime('%Y-%m-%d')
    PossDate = str(PossDate)[0:10]
    return PossDate
  else:
    return PossDate

以下是构建实际表格的代码:

{% for row in the_data %}

<tr>
{% for cell in row %}
 <td> 
  {% if cell is not number  %}
    <b>
    {{ cell | DateFormattr }}
    </b>
  {% else %}
    {% print '{0:,}'.format(cell | int) %}
  {% endif %}
  </td>

这里发生了什么? Raspberry Pi上是否存在使得Flask或Jinja2引擎变得混乱的怪癖?

有很多事情发生,我可能错过了一些细节,所以请随时要求更多澄清。

已编辑添加相关包:

在RPi上:

  • Flask 0.10.1
  • Flask-WTF 0.11
  • WTForms 2.0.2
  • Jinja2 2.7.3
  • numpy 1.8.2
  • pandas 0.14.1
  • SQLAlchemy 1.0.4

在Mac上:

  • Flask 0.10.1
  • Flask-WTF 0.11
  • WTForms 2.0.2
  • Jinja2 2.7.3
  • numpy 1.9.2
  • pandas 0.15.2
  • SQLAlchemy 0.9.9

两者都在运行Python v2.7.9。 (总有一天,我会不再担心并学会爱上Python 3。)

IIRC,由于RPi的限制,我不得不使用apt-get来安装Pandas,因此版本存在差异。

0 个答案:

没有答案