私はショッピングカートアプリケーションを構築しています。私はアプリケーションのログイン、ログアウト、サインアップの部分を動かしています。python 27とgaeを使用してhtmlファイルに投稿できません
{% extends 'base.html' %}
{% block content %}
<h1>Gigi's Catering Menu</h1>
<form method="post">
<label>
<div><h2>Large Gourmet Meat & Cheese Tray</h2></div>
<p>
Fresh Roast Sirloin Beef, Baked Ham, and
Roasted Turkey with Swiss and
American Cheese<br>
Serves 20-25 people
</p>
Price would be $54.99 Per Tray
<input type="hidden" name="unq_id" value="1">
<input type="hidden" name="product_name" value="Large Gourmet Meat & Cheese Tray">
<input type="hidden" name="price" value="54.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>GiGi's Signature Chicken Salad</h2></div>
<h3>Mini Croissants Tray Sold by the Dozen</h3>
Price would be per Dozen $26.99
<input type="hidden" name="unq_id" value="2">
<input type="hidden" name="product_name" value="Chicken Salad Mini Croissants Tray">
<input type="hidden" name="price" value="26.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<h3>Chicken Salad Sold by the Pound</h3>
Price would be per Pound $7.99
<input type="hidden" name="unq_id" value="3">
<input type="hidden" name="product_name" value="Chicken Salad Sold by the Pound">
<input type="hidden" name="price" value="7.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>Relish Tray</h2></div>
<p>
Carrot Sticks, Celery Sticks, Olives, and
Butterchip Pickles Served with Ranch Veggie Dip<br>
Serves 10-15 people
</p>
Price would be $19.99 Per Tray
<input type="hidden" name="unq_id" value="4">
<input type="hidden" name="product_name" value="Relish Tray">
<input type="hidden" name="price" value="19.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>Fruit Tray</h2></div>
<p>Strawberries, Grapes, Pineapple, Honey Dew, Cantaloupe, and
Watermelon (when in season)<br>
Serves 15-20 people
</p>
Price would be $39.99 Per Tray
<input type="hidden" name="unq_id" value="5">
<input type="hidden" name="product_name" value="Fruit Tray">
<input type="hidden" name="price" value="39.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>Toasted Ravioli</h2></div>
<p>Served with Marinara Sauce<br>
Serves 15-20 people
</p>
Price would be $19.99 Per Tray
<input type="hidden" name="unq_id" value="6">
<input type="hidden" name="product_name" value="Toasted Ravioli">
<input type="hidden" name="price" value="19.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>3 Foot Party Sub</h2></div>
<p>Fresh Roasted Sirloin Beef, Baked Ham, Hard
Salami, Swiss Cheese, American Cheese, and
Green Leaf Lettuce<br>
Serves 10-15 people
</p>
Price would be $39.99 Each
<input type="hidden" name="unq_id" value="7">
<input type="hidden" name="product_name" value="3 Foot Party Sub">
<input type="hidden" name="price" value="39.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>Wing Tray</h2></div>
<p>You can have your Wing Tray as a Buffalo Wing or Wild Wing. You can
provide further information in the bottom section of this menu.<br>
Serves 15-20 people and costs about $19.99 Per Tray
</p>
Wing Tray - Select This: Buffalo Wing
<input type="hidden" name="unq_id" value="8">
<input type="hidden" name="product_name" value="Buffalo Wing Tray">
<input type="hidden" name="price" value="19.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<br><br>
Wing Tray - Select This: Wild Wing
<input type="hidden" name="unq_id" value="9">
<input type="hidden" name="product_name" value="Wild Wing Tray">
<input type="hidden" name="price" value="19.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>GiGi's Fresh Made Potato Chips</h2></div>
<p>Served with a French Onion Dip Tray<br>
Serves 10-15 people
</p>
Price would be $16.99 Per Tray
<input type="hidden" name="unq_id" value="10">
<input type="hidden" name="product_name" value="Potato Chips Served with French Onion Dip Tray">
<input type="hidden" name="price" value="16.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>GiGi's Mini Sweet rolls</h2></div>
<ul>
<li>Ham & Swiss Cheese</li>
<li>Fresh Roasted Sirloin Beef & Cheddar Cheese</li>
<li>Fresh Roasted Turkey & Provel Cheese</li>
<li>$21.99 Per Dozen
</ul>
Price would be Ham and Swiss
<input type="hidden" name="unq_id" value="11">
<input type="hidden" name="product_name" value="Sweet Rolls Ham and Swiss By The Dozen">
<input type="hidden" name="price" value="21.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<br>
Price would be Roast Beef and Cheddar Cheese
<input type="hidden" name="unq_id" value="12">
<input type="hidden" name="product_name" value="Sweet Rolls Roast Beef and Cheddar Cheese By The Dozen">
<input type="hidden" name="price" value="21.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<br>
Price would be Roasted Turkey and Provel Cheese
<input type="hidden" name="unq_id" value="13">
<input type="hidden" name="product_name" value="Sweet Rolls Roasted Turkey and Provel Cheese By The Dozen">
<input type="hidden" name="price" value="21.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>GiGi's Brownie Tray</h2></div>
<p>Serves 10-15 people</p>
Price would be $19.99 Per Tray
<input type="hidden" name="unq_id" value="14">
<input type="hidden" name="product_name" value="GiGi's Brownie Tray">
<input type="hidden" name="price" value="19.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>Variety Wrap Platter</h2></div>
<p>Our Variety Wrap Platters come with Chicken Caesar, Turkey Ranch, and
Buffalo Chicken Tender w/Ranch
</p>
Price would be $25.99 Per Tray
<input type="hidden" name="unq_id" value="15">
<input type="hidden" name="product_name" value="Variety Wrap Platter">
<input type="hidden" name="price" value="25.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>Tea Sandwiches</h2></div>
<p>GiGi's Signature Chicken Salad or Tuna Salad on Wheatberry Bread<br>
Serves 10-15 people<br>
$25.99 Per Tray</p>
Price would be Chicken Salad
<input type="hidden" name="unq_id" value="16">
<input type="hidden" name="product_name" value="Tea Sandwiches with Chicken Salad on Wheatberry Bread">
<input type="hidden" name="price" value="25.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<br>
Price would be Tuna Salad
<input type="hidden" name="unq_id" value="17">
<input type="hidden" name="product_name" value="Tea Sandwiches with Tuna Salad on Wheatberry Bread">
<input type="hidden" name="price" value="25.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<label>
<div><h2>GiGi's Cookie Tray</h2></div>
<p>Our Cookie Trays come with Chocolate Chip and Sugar Cookies<br>
Serves 10-20 people</p>
Price would be $16.99 Per Tray
<input type="hidden" name="unq_id" value="18">
<input type="hidden" name="product_name" value="Gigi's Cookie Tray">
<input type="hidden" name="price" value="16.99">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</label>
<br>
<hr style="height:0px">
<br>
<label>
<div><h1>GiGi's Lunch Boxes</h1></div>
<ul style="list-style-type:disc">
<li><h2>Choice of Meat:</h2></li>
<ul style="list-style-type:square">
<li>Fresh Roasted Sirloin Beef</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="100">
<input type="hidden" name="product_name" value="Lunch Box: Meat - Roast Beef">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Fresh Ham</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="101">
<input type="hidden" name="product_name" value="Lunch Box: Meat - Ham">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Fresh Roasted Turkey</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="102">
<input type="hidden" name="product_name" value="Lunch Box: Meat - Roasted Turkey">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Chicken Salad</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="103">
<input type="hidden" name="product_name" value="Lunch Box: Chicken Salad">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Tuna Salad</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="104">
<input type="hidden" name="product_name" value="Lunch Box: Tuna Salad">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</ul>
<li><h2>Choice of Cheese:</h2></li>
<ul style="list-style-type:square">
<li>Cheddar Cheese</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="110">
<input type="hidden" name="product_name" value="Lunch Box: Cheese - Cheddar">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Swiss Cheese</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="111">
<input type="hidden" name="product_name" value="Lunch Box: Cheese - Swiss">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Provolone Cheese</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="112">
<input type="hidden" name="product_name" value="Lunch Box: Cheese - Provolone">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Pepper Jack Cheese</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="113">
<input type="hidden" name="product_name" value="Lunch Box: Cheese - Pepper Jack">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</ul>
<li><h2>Choice of Bread:</h2></li>
<ul style="list-style-type:square">
<li>Wheatberry</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="120">
<input type="hidden" name="product_name" value="Lunch Box: Bread - Wheatberry">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Hoagie</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="121">
<input type="hidden" name="product_name" value="Lunch Box: Bread - Hoagie">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Pretzel</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="122">
<input type="hidden" name="product_name" value="Lunch Box: Bread - Pretzel">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Croissant</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="123">
<input type="hidden" name="product_name" value="Lunch Box: Bread - Croissant">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</ul>
<li><h2>Choice of a Side Item:</h2></li>
<ul style="list-style-type:square">
<li>Potato Salad</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="130">
<input type="hidden" name="product_name" value="Lunch Box: Side - Potato Salad">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Pasta Salad</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="131">
<input type="hidden" name="product_name" value="Lunch Box: Side - Pasta Salad">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Potato Chips</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="132">
<input type="hidden" name="product_name" value="Lunch Box: Side - Potato Chips">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</ul>
<li><h2>Choice of a Dessert:</h2></li>
<ul style="list-style-type:square">
<li>Brownie</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="140">
<input type="hidden" name="product_name" value="Lunch Box: Dessert - Brownie">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
<li>Cookie</li>
<input type="checkbox" name="chkbox" value="True"> Select this Item
<input type="hidden" name="unq_id" value="141">
<input type="hidden" name="product_name" value="Lunch Box: Dessert - Cookie">
Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
</ul>
</ul>
<p>All of our Lunch Box meals come with Lettuce & Tomato.</p>
<p>A Whole Meal In a Box! For $9.49 Each</p>
</label>
<br>
<hr style="height:0px">
<br>
<label>
<div>Additional Comments and/or Special Requests</div>
<textarea name="body">{{body}}</textarea>
</label>
<div class="error">{{ error }}</div>
<input type="button" value="submit">
<input type="reset">
</form>
{% endblock %}
メニューとショッピングカートを扱う機能やその他の必要な機能は次のようになります。ユーザがアプリケーションのサインアップの部分を完了すると、以下の示すように、彼らは項目の選択を提示しているとき、彼らはにリダイレクトされます私は、アプリケーションを実行するときに情報をバックトレースしてもらうと、私はまだこれに苦しんでいます
class MainPageHandler(Handler):
def render_form(self):
""" Render a page with what the customer has ordered """
t = jinja_env.get_template("mainpage.html")
response = t.render()
self.response.out.write(response)
def get(self):
self.render_form()
class MenuHandler(Handler):
""" This will be a function to allow the user to create their specific
order from the selected items. """
def render_form(self, unq_id="", product_name="", price="", qty="", body=""):
""" Render the new post form with or without an error, based on parameters """
t = jinja_env.get_template("menu.html")
response = t.render(unq_id=unq_id, product_name=product_name, price=price, qty=qty, body=body)
self.response.out.write(response)
def get(self):
self.render_form()
def post(self):
unq_id = self.request.get("unq_id")
product_name = self.request.get("product_name")
price = self.request.get("price")
qty = self.request.get("qty")
body = self.request.get("body")
# create new temporary order object and store it in the database
tmp_order = Tmp_Order(unq_id=unq_id,
product_name=product_name,
price=price,
qty=qty,
body=body)
tmp_order.put()
self.redirect('/cart')
class CartHandler(Handler):
""" This will be a function to allow the user to see what they have ordered
from their selections within the menu. """
def update(self, item):
if item.unq_id not in self.content:
self.content.update({item.unq_id: item})
return
for k, v in self.content.get(item.unq_id).items():
if k == 'unq_id':
continue
elif k == 'qty':
total_qty = v.qty + item.qty
if total_qty:
v.qty = total_qty
continue
self.remove_item(k)
else:
v[k] = item[k]
def get_total(self):
return sum([v.price * v.qty for _, v in self.content.items()])
def get_num_items(self):
return sum([v.qty for _, v in self.content.items()])
def remove_item(self, key):
self.content.pop(key)
def render_form(self, item_list=""):
# render the page
t = jinja_env.get_template("cart.html")
response = t.render(item_list = item_list)
self.response.out.write(response)
def get(self):
self.render_form()
def post(self):
self.redirect('/checkout', unq_id=unq_id, product_name=product_name, price=price, qty=qty, body=body)
:以下に挙げるが、単純化のために私は下のメインページ、メニュー、およびショッピングカート機能を掲載します。この情報はPython 2.7、Google App Engine、Jinja2環境で書かれています。すべての助けが大いに評価されます。
トレースバックを投稿できますか?どこから見えるかを示すのに役立ちますか? – Aaron
私はトレースバックを通過しましたが、その時点でエラーは発生しません。私はさらに助けになることができなかったのは残念です。 – jfreynolds
再審査。トレースバックは、微妙な方法で有益な情報になることができます。 –