2017-02-16 4 views
1

Ich habe Probleme herauszufinden, wo meine Funktion editMenuItem() das unbekannte Schlüsselwortargument restaurant_id abbekommt. Ich habe ähnliche Fragen durchsucht und finde keine Lösung. Wenn jemand irgendwelche Vorschläge hat, würde ich sie sehr schätzen.Type Error:() hat ein unerwartetes Schlüsselwortargument erhalten

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 %} 

Ich bin mir nicht sicher, wo dieses Schlüsselwort Argument herkommt, wie die restaurant_id sollte geben, um für meine Funktion nicht notwendig Arbeit. Was mache ich hier falsch? Vielen Dank.

+2

Woher kommt 'menueitem_id'? Tipp: Es ist das gleiche für 'restaurant_id'. – Wombatz

+0

Das einzige, was ich sehen kann, ist die URL, die für meine '@ app.route' verwendet wird. Wäre dies der Punkt, von dem meine Funktion das Argument abzieht? – NoOrangeJuice

Antwort

1

Dank Wombatz Hinweis konnte ich das Problem lösen, indem ich meine editMenuItem Funktion änderte und die notwendige Vorlage änderte.

Aktualisiert Funktion:

### 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) 

Aktualisiert Vorlage:

<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> 

Ich bin neu diese Seite zu verwenden, damit ich nicht sicher bin, ob ich Ihren Kommentar wombatz „upvote“, aber dank für den Hinweis.

Verwandte Themen