Атрибут url_prefix
Атрибут url_prefix применяется к объекту
Blueprint и добавляет общий префикс ко всем
маршрутам, зарегистрированным внутри этого
blueprint-а. Значением атрибута является
строка с путём, которая автоматически
подставляется перед каждым URL blueprint-а.
Атрибут можно задать при создании blueprint-а
через параметр url_prefix или изменить
уже после создания объекта.
По умолчанию атрибут равен None, то есть
префикс не добавляется, и маршруты blueprint-а
доступны по своим собственным путям.
Синтаксис
Blueprint(name, import_name, url_prefix=None)
Также атрибут можно задать после создания:
bp.url_prefix = '/prefix'
Пример
Давайте создадим blueprint с префиксом
'/user' и зарегистрируем его в приложении:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('user', __name__, url_prefix='/user')
@bp.route('/')
def index():
return 'hello'
app.register_blueprint(bp)
Теперь обработчик index доступен по
адресу /user/, а не по /.
Результат выполнения кода для адреса
/user/:
hello
Пример
Давайте зададим префикс с несколькими сегментами пути и посмотрим, как строится итоговый URL:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('api', __name__, url_prefix='/api/v1')
@bp.route('/user')
def user():
return 'abcde'
app.register_blueprint(bp)
Обработчик user доступен по адресу
/api/v1/user. Результат выполнения
кода:
abcde
Пример
Давайте изменим атрибут url_prefix
после создания blueprint-а, но до его
регистрации:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('blog', __name__)
bp.url_prefix = '/blog'
@bp.route('/article')
def article():
return 'article'
app.register_blueprint(bp)
Обработчик article доступен по адресу
/blog/article. Результат выполнения
кода:
article
Пример
Давайте используем функцию url_for
для построения URL с учётом префикса:
from flask import Flask, Blueprint, url_for
app = Flask(__name__)
bp = Blueprint('shop', __name__, url_prefix='/shop')
@bp.route('/item')
def item():
return 'item'
app.register_blueprint(bp)
with app.test_request_context():
res = url_for('shop.item')
print(res)
Результат выполнения кода:
'/shop/item'