Как использовать 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():', он работает.