2017-02-16 10 views
1

私の関数editMenuItem()が未知のキーワード引数restaurant_idをどこから取得しているのかわかりません。私は同様の質問を検索し、解決策を見つけることができません。誰かが何か提案があれば、私は大いに感謝します。種類エラー:()予期しないキーワード引数を持っています

Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
TypeError: editMenuItem() got an unexpected keyword argument 'restaurant_id' 

editMenuItem()

### Edit a menu item. ### 
@app.route('/restaurant/<int:restaurant_id>/menu/<int:menuitem_id>/edit/', 
      methods=['GET', 'POST']) 
def editMenuItem(menuitem_id): 
    menuitem = session.query(MenuItem).filter_by(id=menuitem_id).one() 
    if request.method == 'POST': 
     if request.form['newname']: 
      menuitem.name = request.form['newname'] 
     if request.form['newdescription']: 
      menuitem.description = request.form['newdescription'] 
     if request.form['newprice']: 
      menuitem.description = request.form['newprice'] 
     session.add(menuitem) 
     session.commit() 
     return redirect(url_for('showMenu', restaurant_id=menuitem.restaurant_id)) 
    else: 
     return render_template('editMenuItem.html', menuitem=menuitem) 

Relevant html

{% extends "base.html" %} 
{% block content %} 
<div class="row"> 
    <div class="six columns"> 
    <form action="{{ url_for('editMenuItem', menuitem_id = menuitem.id) }}" method="post"> 
     <div class="six columns"> 
     <div class="six columns"> 
      Menu Item ID : {{ menuitem.id }} 
      <br> 
      Menu Item Name : {{ menuitem.name }} 
      <br> 
      Menu Item Description : {{ menuitem.description }} 
      <br> 
      Menu ITem Price : {{ menuitem.price }} 
      <br> 
     </div> 
     <br> 
     <div class="six columns"> 
      <div class="six columns"> 
      <label for="newItemName">New item name</label> 
      <input type="text" id="newname" class="form" name="newname" placeholder="Enter new name here"> 
      <br> 
      </div> 
      <div class="six columns"> 
      <label for="newItemDescription">New item Description</label> 
      <input type="text" id="newdescription" class="form" name="newdescription" placeholder="Enter new description here"> 
      <br> 
      </div> 
      <div class="six columns"> 
      <label for="newItemPrice">New item Price</label> 
      <input type="text" id="newprice" class="form" name="newprice" placeholder="Enter new price here"> 
      <br> 
      </div> 
     </div> 
     <div class="six columns"> 
      <button type="submit" class="button">Edit</button> 
      <a href="{{ url_for('showMenu') }}" class="button">Cancel</a> 
      <br> 
     </div> 
     </div> 
    </form> 
    </div> 
</div> 
{% endblock %} 

私はこのキーワードの引数はrestaurant_idがに私の機能のために順番に与える必要があってはならないとして、どこから来ているか分かりません作業。私はここで間違って何をしていますか?ありがとうございました。

+2

'menuitem_id'はどこから来たのですか?ヒント: 'restaurant_id'と同じです。 – Wombatz

+0

私が見ることができるのは、私の '@ app.route'に使われているURLだけです。これは、私の関数が引数を引き出しているところでしょうか? – NoOrangeJuice

答えて

1

私はeditMenuItem関数を変更し、必要なテンプレートを変更することで問題を解決することができました。

更新機能:

### Edit a menu item. ### 
@app.route('/restaurant/<int:restaurant_id>/menu/<int:menuitem_id>/edit/', 
      methods=['GET', 'POST']) 
def editMenuItem(menuitem_id, restaurant_id): 
    menuitem = session.query(MenuItem).filter_by(id=menuitem_id).one() 
    restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() 
    if request.method == 'POST': 
     if request.form['newname']: 
      menuitem.name = request.form['newname'] 
     if request.form['newdescription']: 
      menuitem.description = request.form['newdescription'] 
     if request.form['newprice']: 
      menuitem.description = request.form['newprice'] 
     session.add(menuitem) 
     session.commit() 
     return redirect(url_for('showMenu', restaurant_id=menuitem.restaurant_id)) 
    else: 
     return render_template('editMenuItem.html', menuitem=menuitem, restaurant=restaurant) 

更新されたテンプレート:

<form action="{{ url_for('editMenuItem', menuitem_id = menuitem.id, restaurant_id = restaurant.id) }}" method="post"> 

<a href="{{ url_for('showMenu', restaurant_id=menuitem.restaurant_id) }}" class="button">Cancel</a> 

私は私はあなたのコメントWombatzが、おかげで「upvote」ことができるかどうかわからないので、私はこのサイトを使用する新たなんですヒントのために。

関連する問題