Правила в колбе являются уникальными.Если вы определите абсолютно одинаковый URL для одной и той же функции, она по умолчанию будет конфликтовать, потому что вы делаете что-то, что мы запрещаем вам делать, поскольку с нашей точки зрения это неправильно.
Есть одна причина, по которой вы захотитеиметь более одного URL-адреса к одной и той же конечной точке, что обеспечивает обратную совместимость с правилом, существовавшим в прошлом.Начиная с WZ0.8 и Flask 0.8, вы можете явно указать псевдоним для маршрута:
@app.route('/')
@app.route('/index.html', alias=True)
def index():
return ...
В этом случае, если пользователь запрашивает /index.html
Flask автоматически выдаст перманентное перенаправление на /
.
Это не означает, что функция не может быть связана более чем с одним URL, но в этом случае вам нужно изменить конечную точку:
@app.route('/')
def index():
...
app.add_url_rule('/index.html', view_func=index, endpoint='alt_index')
Или, альтернативно:
@app.route('/')
@app.route('/index.html', endpoint='alt_index')
def index():
...
В этом случае вы можете определить представление во второй раз под другим именем.Однако это то, что вы обычно хотите избежать, потому что тогда функция представления должна будет проверить request.endpoint, чтобы увидеть, что вызывается.Вместо этого лучше сделайте что-то вроде этого:
@app.route('/')
def index():
return _index(alt=False)
@app.route('/index.html')
def alt_index():
return _index(alt=True)
def _index(alt):
...
В обоих этих случаях генерация URL-адреса url_for('index')
или url_for('alt_index')
.
Вы также можете сделать это на уровне системы маршрутизации:
@app.route('/', defaults={'alt': False})
@app.route('/index.html', defaults={'alt': True})
def index(alt):
...
В этом случае генерация URL будет url_for('index', alt=True)
или url_for('index', alt=False)
.