[英]How to get row data on form submission when the cell is not an input field
我正在處理問題集 9(金融)並嘗試添加我的個人風格(允許用戶通過指數本身購買更多股票或出售他們已經擁有的股票的股票,而無需手動輸入股票的符號)。 話雖如此,我有以下 HTML:
{% extends "layout.html" %}
{% block title %}
Portfolio
{% endblock %}
{% block main %}
<table class="table table-striped center">
<thead>
<tr>
<th class="text-start">Symbol</th>
<th class="text-start">Name</th>
<th class="text-end">Shares</th>
<th class="text-end">Price</th>
<th class="text-end">TOTAL</th>
<th class="text-middle">Buy/Sell</th>
</tr>
</thead>
<tbody>
{% for stock in stocks %}
<form action="/" method="post">
<tr id="stock_{{ loop.index }}">
<td class="text-start" name="symbol" id="symbol">{{ stock["symbol"] }}</td>
<td class="text-start">{{ stock["name"] }}</td>
<td class="text-end">{{ stock["shares"] }}</td>
<td class="text-end">{{ stock["price"] | usd }}</td>
<td class="text-end">{{ ((stock["price"]) * (stock["shares"])) | usd }}</td>
<td class="text-middle">
<input type="number" min="1" name="shares" placeholder="shares" style="width:80px">
<button type="submit" name="action" value="sell" class="btn btn-primary button">Sell</button>
<button type="submit" name="action" value="buy" class="btn btn-primary button">Buy</button>
</td>
</tr>
</form>
{% endfor %}
</tbody>
<tfoot>
<tr>
<td colspan="4" class="text-end"><b>Cash</b></td>
<td class="text-end">{{ cash[0]["cash"] | usd }}</td>
</tr>
<tr>
<td colspan="4" class="text-end"><b>TOTAL</b></td>
<td class="text-end">{{ total | usd }}</td>
</tr>
</tfoot>
</table>
<script>
document.querySelector("form")addEventListener("submit", function() }
let value = getElementById("#symbol");
console.log(value);
alert(value);
)};
</script>
{% endblock %}
我的表格是通過從我的stocks
controller 傳入的app.py
stock 的字典列表動態生成的。 我覺得將表單提交放在每個表格行而不是整個表格上是最簡單的,這樣我就可以知道單擊buy
或sell
按鈕時實際提交了哪一行。 我不知道如何從不是輸入字段的單元格傳遞數據,在這種情況下<td class="text-start" name="symbol" id="symbol">{{ stock["symbol"] }}</td>
這樣我就可以在服務器端使用該信息來獲取有關股票的所有其他相關信息。 我從我的代碼中得到TypeError: quote_from_bytes() expected bytes
行request.form.get("symbol")
:
@app.route("/", methods=["POST", "GET"])
@login_required
def index():
"""Show portfolio of stocks"""
# Get users cash balance
cash = db.execute("SELECT cash FROM users WHERE id = ?", session["user_id"])
total = cash[0]["cash"]
# Make sure stocks table exists (will only be applicable until first stock purchase on site)
if (db.execute("SELECT name FROM sqlite_master WHERE type = ? AND name = ?", "table", "stocks")):
if request.method == "POST":
# Run checks on input
if not request.form.get("shares"):
return apology("Missing shares")
if int(request.form.get("shares")) < 1:
return apology("Please input positive shares")
# Look up stocks current price
shares = float(request.form.get("shares"))
print(shares)
stock = lookup(request.form.get("symbol"))
print(stock)
price = float(stock["price"])
print(price)
我相信抓取request.form.get("symbol")
沒有意義,因為它不是表單數據的一部分? 無論如何要讓該單元格中的值傳遞給我的服務器端? 是的,最后的 JavaScript 試圖嘗試獲取該數據,以便在提交時修改一個值,然后我可以使用,但我不確定。
感謝您的評論,我已經弄清楚了。 我意識到這不是最好的問題。 我已經實現了另一個readonly
字段並將表單調整為單個單元格,如下所示:
<tbody>
{% for stock in stocks %}
<tr id="stock_{{ loop.index }}">
<td class="text-start">{{ stock["symbol"] }}</td>
<td class="text-start">{{ stock["name"] }}</td>
<td class="text-end">{{ stock["shares"] }}</td>
<td class="text-end">{{ stock["price"] | usd }}</td>
<td class="text-end">{{ ((stock["price"]) * (stock["shares"])) | usd }}</td>
<td class="text-middle">
<form action="/" method="post">
<input type="number" min="1" name="shares" placeholder="shares" style="width:80px">
<input type="text" readonly name="symbol" value="{{ stock['symbol'] }}" style="width:80px">
<button type="submit" name="action" value="sell" class="btn btn-primary button">Sell</button>
<button type="submit" name="action" value="buy" class="btn btn-primary button">Buy</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.