Python Flask/Jinja dict对象没有元素0

Python Flask/Jinja dict对象没有元素0,python,flask,jinja2,Python,Flask,Jinja2,我们使用Flask在用户访问特定url时显示有关扑克牌的信息。从url中获取序列号,如下所示: example.com/dinos/123x124x145,其中X分隔序列号 @app.route('/dino/<string:num>') def dinopage(num): test=num.split("x") print (test) assets = "application/static/assets/dinos.jso

我们使用Flask在用户访问特定url时显示有关扑克牌的信息。从url中获取序列号,如下所示:

example.com/dinos/123x124x145,其中X分隔序列号

@app.route('/dino/<string:num>')
def dinopage(num):
    test=num.split("x")
    print (test)
    assets = "application/static/assets/dinos.json"
    with open(assets) as json_file:
        data = json.load(json_file)
        size=len(test)
        for i in range(size):
         print(i)
         dinodata = data["cardino"+test[i]]
         print(dinodata)
         
         print(len(dinodata))
        return render_template('dinogrid.html', noofdinos=len(test), data=dinodata)

但是,当我尝试使用

{%for i in range(0, noofdinos)%}
{{data[i]["species"] }}
{%endfor%} 
有人向我打招呼

jinja2.exceptions.UndefinedError: dict object has no element 0
控制台打印输出显示我正在获取正确的数据。但很明显,我没有以正确的方式向金贾展示。例如,这是通过访问/dino/6851x12生成的控制台输出

['6851', '12']
0
{'name': 'Cardino #6851', 'image': 'QmY8xmQRKHXckUWSzwmGd6AyxxnNk6RadW79QCjbSGtcAm', 'src': 'QmRFVS7Y48vaBL91EuBk8pVaXzu4wWngCh3UeALGE2Qj3Q', 'type': 'image/png', 'species': 'Parasaurolophus (5.16%)', 'dinoRarity': 'Rare', 'attributes': {'badge': 'Cardino Purple (6.60%)', 'background': 'Mars (5.27%)', 'colour': 'Dino Green (7.03%)', 'itemcount': '4 (27.21%)', 'items': [{'lefthand': 'Mystical Lantern (4.36%)', 'rarity': 'Uncommon'}, {'righthand': '', 'rarity': ''}, {'tail': 'Flame (4.55%)', 'rarity': 'Uncommon'}, {'eye': '', 'rarity': ''}, {'shoes': 'Wellies (10.09%)', 'rarity': 'Common'}, {'tummy': 'Dino Skull (3.75%)', 'rarity': 'Rare'}]}, 'publisher': 'https://cardinos.io', 'artist': ['MAAD Frog Ro Marenghi', 'http://maadfrog.com'], 'creators': ['przcntn', 'LegionOfBrad'], 'release': 'S1'}
11
1
{'name': 'Cardino #12', 'image': 'QmQRMyLHprSDswZt6T15htkjgxbPrWRzfGsfyjtc2Pm6TQ', 'src': 'QmVD7g8ZhdpnsQX7qLPmaRLKyacWuoBdTLhqRskWRwzrBD', 'type': 'image/png', 'species': 'Corythosaurus (11.61%)', 'dinoRarity': 'Common', 'attributes': {'badge': 'Cardino Turquoise (7.11%)', 'background': 'Yellow (16.68%)', 'colour': 'Violet (5.25%)', 'itemcount': '5 (12.14%)', 'items': [{'lefthand': 'Futuristic Cane (4.42%)', 'rarity': 'Uncommon'}, {'righthand': 'Bone (4.27%)', 'rarity': 'Uncommon'}, {'tail': '', 'rarity': ''}, {'eye': 'Terminator Eye (8.41%)', 'rarity': 'Common'}, {'shoes': 'Wellies (10.09%)', 'rarity': 'Common'}, {'tummy': 
'Football (4.93%)', 'rarity': 'Common'}]}, 'publisher': 'https://cardinos.io', 'artist': ['MAAD Frog Ro Marenghi', 'http://maadfrog.com'], 'creators': ['przcntn', 'LegionOfBrad'], 'release': 'S1'}
11

我的问题是如何正确地向Jinja中的循环显示此项?

dinodata
在您的flask应用程序中需要添加新的恐龙列表。现在它只是一个变量,在循环的每次迭代中都会被覆盖

@app.route('/dino/<string:num>')
def dinopage(num):
    test=num.split("x")
    print (test)
    assets = "application/static/assets/dinos.json"
    dinodata = []
    with open(assets) as json_file:
        data = json.load(json_file)
        size=len(test)
        for i in range(size):
            print(i)
            dinodata.append(data["cardino"+test[i]])
            print(dinodata)
         
            print(len(dinodata))
    return render_template('dinogrid.html', noofdinos=len(test), data=dinodata)
@app.route(“/dino/”)
def dinopage(数字):
测试=num.split(“x”)
打印(测试)
assets=“application/static/assets/dinos.json”
恐龙=[]
打开(资产)作为json_文件:
data=json.load(json_文件)
尺寸=透镜(测试)
对于范围内的i(尺寸):
印刷品(一)
追加(数据[“cardino”+测试[i]]
印刷品(恐龙)
印刷品(len(dinodata))
返回render_模板('dinogrid.html',noofdinos=len(test),data=dinodata)

data[“species”][i]
而不是
data[i][“species”]
有效吗?这似乎是通过#12的species中的字母来循环的。循环的第一个输出是C,下一次是O。数据的结构和数据类型是什么?错误消息表明,
数据
是一个dict。如果确实是这样,则迭代会失败,因为您试图像访问列表一样访问
数据
中的条目。
@app.route('/dino/<string:num>')
def dinopage(num):
    test=num.split("x")
    print (test)
    assets = "application/static/assets/dinos.json"
    dinodata = []
    with open(assets) as json_file:
        data = json.load(json_file)
        size=len(test)
        for i in range(size):
            print(i)
            dinodata.append(data["cardino"+test[i]])
            print(dinodata)
         
            print(len(dinodata))
    return render_template('dinogrid.html', noofdinos=len(test), data=dinodata)