首页 文章

试图从烧瓶中将表插入jinja2模板

提问于
浏览
1

我一直在尝试使用 Jinja2 中的超级简单模板创建我的第一个Flask网站 . (我从我的常规HTML开始并快速放弃它,因为找出放置东西的地方是一场噩梦 . 我将在这个困难部分之后重新调整并调整烧瓶代码,现在,我已经删除了所有但是html声明和试图放入 table . )

Flask Code:

from flask import Flask
from flask import render_template
import redis
from flask import json
from dateutils.parser import parse
from flask_table import Table, Col, DatetimeCol
r=redis.StrictRedis(host='localhost', port =6379, db=0)

app = Flask(__name__)

@app.route('/')
@app.route('/p/')
def p():
    raw = r.get('rData')
    raw= yaml.load(raw)
    raw = json.loads(raw)
    for item in raw:
         item['date_time'] = parse(item['date_time'])
    class ItemTable(Table):
        Sensor = Col("Sensor")
        date_time = DatetimeCol("Date & Time")
        Reading = Col("Reading")
    table = ItemTable(raw)
    return render_template('p.html'), table

if __name__ == '__main__':
    app.run()

此代码将在本地调用页面/ p /如果我要求它显示 raw ,它将打印出该表的数据(我在下面包含) .

{{ raw }}

我收回了我的字典!

但是当我尝试显示 ItemTable 应该创建的表时,它会崩溃我的页面或根本没有任何显示 . 我也试过这种方式使用返回码:

return render_template('p.html', table=table)

将它作为完全执行的html的变量传递,没有什么好处 . {{ table }}

Actual Data in a list of dictionaries:

[{"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 27.5, "Sensor": "Water Temperature (degrees Celsius)"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 0.91, "Sensor": "Lake Gage Height (in feet)"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 53.0, "Sensor": "Specific Conductivity in microSiemens"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 7.3, "Sensor": "Dissolved Oxygen (ppm)"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 6.9, "Sensor": "pH (standard field)"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 27.7, "Sensor": "Air Temperature (in degrees Celsius)"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 2.5, "Sensor": "Wind Speed (in mph)"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 238.0, "Sensor": "Wind Direction (degrees CW from North)"}, {"Reading": 30.7, "Sensor": "Relative Humidity", "date-Time": "2016-08-03T14:00:00.000-04:00"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 1.26, "Sensor": "Marsh Gage Height in feet"}, {"date_time": "2016-08-03T14:00:00.000-04:00", "Reading": 0.01, "Sensor": "24 Cumulative Precipication (inches)"}]

我将其从我创建的redis缓存中拉出来,但您可以将 raw= 设置为上面的列表并替换它 .

Conundrum:

我需要在Jinja2中插入什么才能使表格显示在这两个 return 演示文稿中的一个,或者是否有其他方法告诉flask将转换后的字典列表移植到模板中?

我到处搜索,烧瓶桌上的页面没有显示如何在另一侧展示它 .

我的目标是将它放在一个容器中,该容器是基本布局的子容器 . 但只是让它显示为一张 table 就足够了,我可以从那里找出其余部分 .

Simplest HTML/Jinja template I could create:

<!doctype html>

<h1> test </h1>


{{table}}

我尝试使用 {% table %} 也无济于事 .

我不确定问题是我是否在烧瓶中生成html并试图将其发送到模板或者我是否告诉Jinja如何呈现我创建的 table 元素并包含在 render_template 方法中 .

<h1> test </h1> 只是为了让我在发送表时看到页面是否完全呈现 . 这不重要 .

我相信我遇到的问题是大多数教程都过于简化,并且每组文档( FlaskJinja2 )都很清楚等式的另一面 . 我发现 ONEflask-table 的解释在两页上提供但是相同的东西 . 没有提出用模板调用它的建议 .

更新:

我现在运行时遇到KeyError:更改如下:

raw= yaml.load(raw) #new to make a list for reading after next line
    raw = json.loads(raw) #makes it iterable in UTF-8
    for item in raw:
         item['date_time'] = parse(item['date_time']) #creates dates but throws 
    errors which stops flask

新编辑:json.loads之后的部分数据:

[{u'Reading': 25.9,
  u'Sensor': u'Water Temperature (degrees Celsius)',
  u'date_time': u'2016-08-05T08:45:00.000-04:00'},
 {u'Reading': 0.88,
  u'Sensor': u'Lake Gage Height (in feet)',
  u'date_time': u'2016-08-05T08:45:00.000-04:00'}]

`parse ['date_time']后的数据:

raw[1]['date_time']
datetime.datetime(2016, 8, 5, 8, 45, tzinfo=tzoffset(None, -14400))

New Update: 我不知何故错过了 date_time 字段中的一个大写 T ,因此纠正修复了KeyError ...但我仍然无法将其传递给HTML . 我得到了一大堆涉及文件夹和文件的行,然后我得到:

AttributeError: 'NoneType' object has no attribute 'datetime_formats'

为什么日期和时间如此有趣?

1 回答

  • 1

    您需要将时间戳转换为datetime对象

    from dateutil.parser import parse # pip install python-dateutil
    
    raw = json.loads(raw)
    for item in raw:
        item['date_time'] = parse(item['date_time'])
    

    并将 table 传递给模板

    return render_template('p.html', table=table)
    

    更新:所有项目必须具有 date_time 键 . 您的示例中的某些项目具有 date-Time .

相关问题