python - Python Flask - 返回具有相同变量的值
问题描述
所以我的代码有问题,我试图从python将值返回到我的HTML。现在我正在使用一个包含 190 多种产品的 API,它们都存储在 itemName、buyPrice、sellPrice 等变量中。
例如,如果我用我的 HTML 编写:
{{ 项目名 }}
我写了很多次,并使用返回:return ("index.html", itemName=itemName)
它当然会一遍又一遍地返回相同的名称,现在我希望它返回第一个名称,然后是第二个名称,然后是第三个名称,依此类推,买卖价格相同。
名称位于名为“产品”的数组中,价格等位于我使用 request.get(...) 的 API 中。我的代码在下面
import requests
import time
import datetime
from flask import Flask, render_template, redirect, url_for
app = Flask(__name__)
product = [
"BROWN_MUSHROOM",
"INK_SACK:3", # cocao beans
"INK_SACK:4", # lapis lazuli
"TARANTULA_WEB",
"CARROT_ITEM",
"ENCHANTED_POTATO",
"ENCHANTED_SLIME_BALL",
"ENCHANTED_GOLDEN_CARROT",
"ENCHANTED_RED_MUSHROOM",
"ENCHANTED_RABBIT_HIDE",
"ENCHANTED_BIRCH_LOG",
"ENCHANTED_GUNPOWDER",
"ENCHANTED_MELON",
"ENCHANTED_SUGAR",
"CACTUS",
"ENCHANTED_BLAZE_ROD",
"ENCHANTED_CAKE",
"PUMPKIN",
"ENCHANTED_BROWN_MUSHROOM",
"WHEAT",
"ENCHANTED_RAW_SALMON",
"ENCHANTED_GLISTERING_MELON",
"PRISMARINE_SHARD",
"PROTECTOR_FRAGMENT",
"ENCHANTED_EMERALD",
"ENCHANTED_SPIDER_EYE",
"RED_MUSHROOM",
"MUTTON",
"ENCHANTED_MELON_BLOCK",
"DIAMOND",
"WISE_FRAGMENT",
"COBBLESTONE",
"SPIDER_EYE",
"RAW_FISH",
"ENCHANTED_PUFFERFISH",
"POTATO_ITEM",
"ENCHANTED_HUGE_MUSHROOM_1", # enchanted brown mushroom block
"ENCHANTED_COBBLESTONE",
"ENCHANTED_HUGE_MUSHROOM_2", # enchanted red mushroom block
"PORK",
"PRISMARINE_CRYSTALS",
"ICE",
"HUGE_MUSHROOM_1", # brown mushroom block
"HUGE_MUSHROOM_2", # red mushroom block
"LOG_2:1", # dark oak
"ENCHANTED_SNOW_BLOCK",
"GOLDEN_TOOTH",
"STRING",
"RABBIT_FOOT",
"REDSTONE",
"ENCHANTED_CACTUS_GREEN",
"ENCHANTED_CARROT_STICK",
"ENCHANTED_LAPIS_LAZULI_BLOCK",
"ENCHANTED_COOKIE",
"ENCHANTED_ENDSTONE",
"ENCHANTED_SAND",
"ENCHANTED_STRING",
"STRONG_FRAGMENT",
"SLIME_BALL",
"ENCHANTED_ACACIA_LOG",
"SNOW_BALL",
"ENCHANTED_EGG",
"SAND",
"RAW_CHICKEN",
"ENCHANTED_LAPIS_LAZULI",
"ENCHANTED_GHAST_TEAR",
"ENCHANTED_COCOA",
"SEEDS",
"ENCHANTED_LEATHER",
"ENCHANTED_SPONGE",
"HAY_BLOCK",
"FLINT",
"INK_SACK",
"WOLF_TOOTH",
"ENCHANTED_SPRUCE_LOG",
"ENCHANTED_ROTTEN_FLESH",
"ENCHANTED_GRILLED_PORK",
"ENCHANTED_NETHER_STALK",
"ENCHANTED_REDSTONE_BLOCK",
"ENCHANTED_QUARTZ_BLOCK",
"GREEN_CANDY",
"ENCHANTED_REDSTONE",
"ENCHANTED_REDSTONE_LAMP",
"GRAVEL",
"MELON",
"ENCHANTED_LAVA_BUCKET",
"ENCHANTED_PACKED_ICE",
"RAW_FISH:3", # pufferfish
"ENCHANTED_PRISMARINE_SHARD",
"ENCHANTED_CARROT_STICK",
"ENCHANTED_IRON_BLOCK",
"BONE",
"RAW_FISH:2", # clownfish
"RAW_FISH:1", # raw salmon
"REVENANT_FLESH",
"ENCHANTED_PORK",
"ENCHANTED_GLOWSTONE",
"FEATHER",
"NETHERRACK",
"SPONGE",
"BLAZE_ROD",
"ENCHANTED_DARK_OAK_LOG",
"YOUNG_FRAGMENT",
"ENCHANTED_CLOWNFISH",
"ENCHANTED_GOLD",
"ENCHANTED_RAW_CHICKEN",
"ENCHANTED_WATER_LILY",
"LOG:1", # spruce
"CATALYST",
"LOG:3", # jungle
"LOG:2", # birch
"ENCHANTED_GLOWSTONE_DUST",
"ENCHANTED_INK_SACK",
"ENCHANTED_CACTUS",
"ENCHANTED_SUGAR_CANE",
"ENCHANTED_COOKED_SALMON",
"ENCHANTED_SEEDS",
"LOG", # oak
"GHAST_TEAR",
"ENCHANTED_ENDER_PEARL",
"UNSTABLE_FRAGMENT",
"PURPLE_CANDY",
"ENCHANTED_FERMENTED_SPIDER_EYE",
"ENCHANTED_GOLD_BLOCK",
"ENCHANTED_JUNGLE_LOG",
"ENCHANTED_FLINT",
"IRON_INGOT",
"ENCHANTED_EMERALD_BLOCK",
"ENCHANTED_CLAY_BALL",
"GLOWSTONE_DUST",
"GOLD_INGOT",
"REVENANT_VISCERA",
"TARANTULA_SILK",
"ENCHANTED_MUTTON",
"SUPER_EGG",
"SUPER_COMPACTOR_3000",
"ENCHANTED_IRON",
"STOCK_OF_STONKS",
"ENCHANTED_HAY_BLOCK",
"ENCHANTED_BONE",
"ENCHANTED_PAPER",
"ENCHANTED_DIAMOND_BLOCK",
"SUPERIOR_FRAGMENT",
"EMERALD",
"ENCHANTED_RABBIT_FOOT",
"ENCHANTED_ICE",
"HOT_POTATO_BOOK",
"CLAY_BALL",
"OLD_FRAGMENT",
"GREEN_GIFT",
"PACKED_ICE",
"WATER_LILY", # lily pad
"LOG_2", # acacia
"HAMSTER_WHEEL",
"ENCHANTED_OBSIDIAN",
"ENCHANTED_COAL",
"ENCHANTED_QUARTZ",
"COAL",
"ENDER_PEARL",
"ENCHANTED_COAL_BLOCK",
"ENCHANTED_PRISMARINE_CRYSTALS",
"ENCHANTED_WET_SPONGE",
"ENDER_STONE", # end stone
"ENCHANTED_RAW_FISH",
"QUARTZ",
"FOUL_FLESH",
"RAW_BEEF",
"ENCHANTED_EYE_OF_ENDER",
"SUGAR_CANE",
"MAGMA_CREAM",
"RED_GIFT",
"ENCHANTED_RAW_BEEF",
"ENCHANTED_SLIME_BLOCK",
"ENCHANTED_FEATHER",
"ENCHANTED_OAK_LOG",
"RABBIT_HIDE",
"WHITE_GIFT",
"RABBIT",
"NETHER_STALK",
"SULPHUR",
"ENCHANTED_CARROT",
"ENCHANTED_PUMPKIN",
"ROTTEN_FLESH",
"ENCHANTED_COOKED_FISH",
"OBSIDIAN",
"ENCHANTED_MAGMA_CREAM",
"ENCHANTED_FIREWORK_ROCKET",
"LEATHER",
"ENCHANTED_COOKED_MUTTON",
"ENCHANTED_RABBIT",
"ENCHANTED_BREAD",
"ENCHANTED_CHARCOAL",
"ENCHANTED_BLAZE_POWDER",
"SUMMONING_EYE",
"SNOW_BLOCK",
"ENCHANTED_BAKED_POTATO",
"COMPACTOR",
"ENCHANTED_DIAMOND"
]
for x in product:
f = requests.get(
"https://api.hypixel.net/skyblock/bazaar/product?key=[key supposed to be secret]&productId=" + x).json()
# Item Name
itemName = f["product_info"]["product_id"]
# TimeStamp
timestamp = f["product_info"]["week_historic"][0]["timestamp"]
unixTimestamp = timestamp / 1000.0
# Buy Price
buyPrice = f["product_info"]["buy_summary"][0]["pricePerUnit"]
# Buy Amount
buyAmount = f["product_info"]["buy_summary"][0]["amount"]
# Buy Orders
buyOrders = f["product_info"]["buy_summary"][0]["orders"]
# Sell Price
sellPrice = f["product_info"]["sell_summary"][0]["pricePerUnit"]
# Sell Amount
sellAmount = f["product_info"]["sell_summary"][0]["amount"]
# Sell Orders
sellOrders = f["product_info"]["sell_summary"][0]["orders"]
# Week History
# Buys
buys = f["product_info"]["week_historic"][0]["buys"]
# Buy Volume
buyVolume = f["product_info"]["week_historic"][0]["buyVolume"]
# Sells
sells = f["product_info"]["week_historic"][0]["sells"]
# Sell Volume
sellVolume = f["product_info"]["week_historic"][0]["sellVolume"]
@app.route("/")
def index():
return render_template("index.html", itemName=itemName)
if __name__ == "__main__":
app.run(debug=True)
解决方案
为了达到您需要的要求,循环应该在 html 文件中。这是Jinja 的文档
这是您可以根据当前配置执行的操作的示例 @app.route("/")
@app.route("/")
def index():
return render_template("index.html", product=product)
只是将模板变量更改为product
. 在该更改之后,您只需在 html 文件中对其进行迭代。这是一个最小的示例,其中包含您需要进行的更改。
索引.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
{% for item in product %}
<h1>{{ item }}</h1>
{% endfor %}
</div>
</body>
</html>
要使用 api 中的值,您必须创建一个新列表,并将其传递给模板......只需迭代并将数据放入新列表中。之后将新列表传递给视图。
full_list = list()
for x in product:
row = list()
row.append(x)
f = requests.get(
"https://api.hypixel.net/skyblock/bazaar/product?key=[key supposed to be secret]&productId=" + x).json()
# Item Name
itemName = f["product_info"]["product_id"]
row.append(itemName)
# TimeStamp
timestamp = f["product_info"]["week_historic"][0]["timestamp"]
row.append(timestamp)
unixTimestamp = timestamp / 1000.0
# Buy Price
buyPrice = f["product_info"]["buy_summary"][0]["pricePerUnit"]
row.append(buyPrice)
# Buy Amount
buyAmount = f["product_info"]["buy_summary"][0]["amount"]
row.append(buyAmount)
#and so on with every information you need in html.
#...
full_list.append(row)
现在只需 使用新的模板变量名称更改您的@app.route("/")
和:index.html
@app.route("/")
def index():
return render_template("index.html", full_list=full_list)
推荐阅读
- python - 如何读取每行具有不同列的文件?
- java - 如何从 Spring Data JPA NativeQuery 接收一个集合?[导致 NotReadablePropertyException]
- sql - 选择日期最高的行
- phabricator - arc diff --update 总是创建新评论
- java - defineClass 方法抛出 java.lang.ClassFormatError: Incompatible magic value 1885430635 in class file
- reactjs - socket.io 连接不适用于 react.js
- node.js - 我的 node.js 代码在 aws-lambda 中工作不稳定,有时工作正常,有时会跳过那段代码的数据持久性
- caching - 兵马俑服务器阵列如何存储数据?
- charts - 如何修复 Vue.js(laravel) 中的“Elastigantt is not defined”错误
- image - 使用 Flutter 将 n 个图像上传到 Firebase