2017-02-16 4 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

Wombatz 힌트 덕분에 내 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에"할 수 있다면, 나는 확실하지 않다 있도록이 사이트를 사용하는 새로운 해요하지만 덕분에 힌트를 위해.

관련 문제