2012-10-14 152 views
4

欲以瓶的url_for方法时,我有一个错误。我不确定它是什么原因,因为我只跟随Flask快速入门。我是一个具有Python经验的Java人,想要学习Flask。烧瓶url_for类型错误

这里的痕迹:

Traceback (most recent call last): 
    File "hello.py", line 36, in <module> 
    print url_for(login) 
    File "/home/cobi/Dev/env/flask/latest/flask/helpers.py", line 259, in url_for 
    if endpoint[:1] == '.': 
TypeError: 'function' object has no attribute '__getitem__ 

我的代码是这样的:

from flask import Flask, url_for 
app = Flask(__name__) 
app.debug = True 

@app.route('/login/<username>') 
def login(): pass 

with app.test_request_context(): 
    print url_for(login) 

我已经试过瓶的稳定和发展都版本,并仍然出现错误。任何帮助都感激不尽!谢谢你,如果我的英语不太好,很抱歉。

回答

4

docsurl_for需要一个字符串,而不是一个函数。您还需要提供用户名,因为您创建的路线需要一个。

而是执行此操作:

with app.test_request_context(): 
    print url_for('login', username='testuser') 

因为字符串有__getitem__方法,但功能没有您收到此错误。

>>> def myfunc(): 
...  pass 
... 
>>> myfunc.__getitem__ 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'function' object has no attribute '__getitem__' 
>>> 'myfunc'.__getitem__ 
<method-wrapper '__getitem__' of str object at 0x10049fde0> 
>>> 
+0

我不好,你说得对。但现在又出现了一个错误。 '打印url_for( '登录') 文件 “/home/cobi/Dev/env/flask/latest/flask/helpers.py”,线路296,在url_for 回报appctx.app.handle_url_build_error(错误,端点值) 文件 “/home/cobi/Dev/env/flask/latest/flask/helpers.py”,线路289,在url_for force_external =外部) 文件“/家/ COBI /开发/ ENV /瓶/最新/ VENV/local/lib目录/ python2.7 /站点包/ WERKZEUG-0.8.3-py2.7.egg/WERKZEUG/routing.py”,线路1607,在建 提高BuildError(端点,价值观,方法) WERKZEUG .routing.BuildError:(“登录”,{},无)' – cobicobi

+0

您的问题是,它预计,登录功能有提供的用户名。改为使用url_for('login',username ='cobicobi')。 –

+0

啊我想我现在明白了。你是对的。 'url_for'需要至少有端点中定义的参数。如果我没有在端点定义参数比'url_for'将工作与任何一个参数或没有。但是,如果我在它定义一个参数,我还必须提供在'url_for'调用参数。 – cobicobi