Подтвердить что ты не робот

Создание URL с Flask и именами уникальных обработчиков

Flask предоставляет функцию url_for для создания URL-адресов для обработчиков на основе шаблона URL. Но это будет означать, что функции обработчика должны иметь уникальные имена во всем приложении. Это правильно?

Пример

Модуль A имеет обработчик index:

@app.route('/')
def index(): pass

И модуль B имеет другой обработчик index:

@app.route('/anotherindex')
def index(): pass

Как отличить обработчики под названием index при создании URL-адресов?

url_for('index')
4b9b3361

Ответ 1

Я не знаю, как вы могли бы обойти все представления, направляемые одним и тем же модулем.

То, что я обычно делаю, это разделить мои представления в разных модулях (например, с модулем A и B) и зарегистрировать их в качестве чертежей, после чего при использовании функции url_for() вы можете префикс просмотрите имя с вашим названием, а затем избегайте конфликтов и потенциальных проблем.

Вот пример:

main_views.py:

from flask import Blueprint
main = Blueprint('main', __name__)

@main.route('/')
def index():
    pass

admin_views.py:

from flask import Blueprint
admin = Blueprint('admin', __name__)

@admin.route('/admin')
def index():
    pass

application.py:

from flask import Flask
from main_views import main
from admin_views import admin

app = Flask('my_application')
app.register_blueprint(main)
app.register_blueprint(admin)

Теперь, чтобы получить доступ к 2 показам индекса и по-прежнему различать один от другого, просто используйте url_for('main.index') или url_for('admin.index')

EDIT:

Еще одна полезная информация о маршрутизации с использованием чертежей при регистрации чертежа вы можете передать аргумент url_prefix, который будет применяться ко всем представлениям в этом проекте.

Например, учитывая следующий код:

admin_views.py

from flask import Blueprint
admin = Blueprint('admin', __name__)

@admin.route('/')
def index():
    pass

@admin.route('/logout')
def logout():
    pass

application.py:

from flask import Flask
from admin_views import admin

app = Flask('my_application')
app.register_blueprint(admin, url_prefix='/admin')

2 вида будут доступны по URL /admin/ и /admin/logout