cobicobi
cobicobi

Reputation: 43

flask url_for TypeError

I have an error when trying to use the url_for method in Flask. I'm not sure what the cause of it because I only follow the Flask quick start. I'm a Java guy with a bit of Python experience and want to learn Flask.

Here's the trace:

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__

My code is like this:

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)

I'm have tried both the stable and development version of Flask and the error still occurs. Any help will be much appreciated! Thank you and sorry if my English is not very good.

Upvotes: 4

Views: 3240

Answers (1)

Nathan Villaescusa
Nathan Villaescusa

Reputation: 17629

The docs say that url_for takes a string, not a function. You also need to provide a username since the route you created requires one.

Do this instead:

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

You are receiving this error because strings have a __getitem__ method but functions do not.

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

Upvotes: 5

Related Questions