Как использовать flask.url_for() с фляжкой?
У меня есть настройка Flask, как это:
api = Api(app, decorators=[csrf_protect.exempt])
api.add_resource(FTRecordsAPI,
'/api/v1.0/ftrecords/<string:ios_sync_timestamp>',
endpoint="api.ftrecord")
Я хотел бы перенаправить внутренне до конечной точки api.ftrecord
.
Но как только я попытаюсь это сделать:
base_url = flask.url_for('api.ftrecord')
Я получаю исключение.
File "/Users/hooman/workspace/F11A/src/lib/werkzeug/routing.py", line 1620, in build
raise BuildError(endpoint, values, method)
BuildError: ('api.ftrecord', {}, None)
Что я пропущу, пожалуйста?
Ответы
Ответ 1
Вам нужно указать значение для ios_sync_timestamp
части вашего URL:
flask.url_for('api.ftrecord', ios_sync_timestamp='some value')
или вы можете использовать Api.url_for()
, который берет ресурс:
api.url_for(FTRecordsAPI, ios_sync_timestamp='some value')
Ответ 2
У меня была эта проблема сегодня. Здесь запрос на перенос, который добавил функциональность (11 месяцев назад):
https://github.com/twilio/flask-restful/pull/110
Вы можете увидеть его пример использования там.
В моем файле ресурсов у меня нет доступа к контексту приложения. Поэтому я должен был сделать это:
from flask.ext import restful
from flask import current_app
api = restful.Api
print api.url_for(api(current_app), UserResource, user_id=user.id, _external=True)
Надеюсь, что это поможет.
Ответ 3
api = Api(app, decorators=[csrf_protect.exempt])
api.add_resource(FTRecordsAPI,
'/api/v1.0/ftrecords/<string:ios_sync_timestamp>',
endpoint="api.ftrecord")
with app.test_request_context():
base_url = flask.url_for('api.ftrecord')
Я встретил ту же ошибку.
Используя 'with app.test_request_context():', он работает.