url_for构建错误

时间:2015-04-10 09:33:23

标签: python flask build-error

我是关于flask和html的新手。当我尝试在我的HTML代码中使用action属性时出现构建错误,我不知道为什么会发生这种情况。 这是我的HTML代码:

<div class="post">
<form method=post action="{{url_for('add_post')}}" ></a>
<input type="text" name="post" placeholder="What's happenig?" /> 
<input type="submit" value="post" class="post_button" > 
</div><!--end of class post-->

和我的烧瓶:

@app.route('/mk/add_post/<username>' , methods=['POST'])
def add_post():
    if request.method == 'POST':
        text=request.form('post')
        user=session['username']        
        post(user , text)
        p='/mk/main/%s'%username
        return redirect(p)

我收到此错误:

BuildError: ('add_post', {}, None)

任何想法?

1 个答案:

答案 0 :(得分:2)

在获取用户名表单会话时,您无需将网址路径定义为@app.route('/mk/add_post/<username>' , methods=['POST'])。这应该有效:

@app.route('/mk/add_post' , methods=['POST'])
def add_post():
    ...

如果您确实希望坚持'/mk/add_post/<username>'。将模板更改为:

<form method=post action="{{url_for('add_post', username='mahnoosh')}}" ></a>

注意:您也忘了添加用户名作为参数。

@app.route('/mk/add_post/<username>' , methods=['POST'])
def add_post(username):
    ...

这是我测试的方式:

python脚本:

from flask import *                                  

app = Flask(__name__)                                

@app.route('/mk/add_post/<username>' , methods=['POST'])       
def add_post(username):                              
    if request.method == 'POST':                     
        print username                               
        return username                              

@app.route('/')                                      
def main():                                          
    return render_template('so.html')                

if __name__ == "__main__":                           
    app.run(host='0.0.0.0', debug=True, port=5050)

<强> so.html:

<html>                                                                        
<div class="post">                                                            
  <form method=post action="{{url_for('add_post', username='mahnoosh')}}" ></a>  
<input type="text" name="post" placeholder="What's happenig?" />              
<input type="submit" value="post" class="post_button" >                       
</div>                                                                        
</html>