2017-03-02 7 views
0

引数を渡さなければならない動的なURIを作成するのに苦労しています。 1つの引数を渡そうとすると、タイプエラーメッセージが表示されます。それは私が0引数を渡したことを続けている。私は問題を見つけることができませんでした。Flask:TypeError、引数を渡すことができません

これは、これはエラーメッセージです

{% for todo in todo %}  
<form action="{{ url_for('delete_todo', todo_id=todo.todo_id) }}" method="post"> 
     <input type="hidden" name="todo_id" value="{{ todo.todo_id }}"> 
     <input type="submit" value="Delete"> 
</form> 
{% else %} 
{% endfor %} 

引数を渡すことになって

@app.route('/delete_todo/<int:todo_id>', methods=['POST']) 
@login_required 
def delete_todo(todo_id): 
    if request.form['todo_id']: 
     g.db.execute('''delete * from todo where todo_id = ?''', request.form['todo_id']) 
     g.db.commit() 
     flash('Your message was deleted') 
    return redirect(url_for('index')) 

views.pyテンプレートです。

TypeError 
TypeError: _wrapped_view() takes at least 1 argument (0 given) 

Traceback (most recent call last) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1994, in __call__ 
return self.wsgi_app(environ, start_response) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1985, in wsgi_app 
response = self.handle_exception(e) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1540, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1982, in wsgi_app 
response = self.full_dispatch_request() 
File "C:\Python27\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1517, in handle_user_exception 
reraise(exc_type, exc_value, tb) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request 
rv = self.dispatch_request() 
File "C:\Python27\lib\site-packages\flask\app.py", line 1598, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
TypeError: _wrapped_view() takes at least 1 argument (0 given) 
The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error. 
To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side. 

You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection: 

dump() shows all variables in the frame 
dump(obj) dumps all that's known about the object 
Brought to you by DON'T PANIC, your friendly Werkzeug powered traceback interpreter. 
+0

なぜ 'POST'メソッドを使用するときにURLにパラメータを渡すのですか? – stamaimer

+0

既に 'request.form ['todo_id']'から 'todo_id'を持つことができますなぜ動的URLを使用していますか? – metmirr

答えて

0

todo_idは既にフォームで送信されているため、URLでパラメータとして送信する必要はありません。また、文字列todo_idをintに変換することを忘れないでください。

@app.route('/delete_todo', methods=['POST']) 
@login_required 
def delete_todo(): 
    if request.form['todo_id']: 
     g.db.execute('''delete * from todo where todo_id = ?''',int(request.form['todo_id'])) 
     g.db.commit() 
     flash('Your message was deleted') 
    return redirect(url_for('index')) 
関連する問題