quy tắc trong Flask là duy nhất. Nếu bạn xác định cùng một URL tuyệt đối cho cùng một chức năng, nó sẽ mặc định xung đột vì bạn đang làm điều gì đó mà chúng tôi ngăn bạn làm từ quan điểm của chúng tôi là sai.
Có một lý do khiến bạn muốn có nhiều URL đến cùng điểm cuối tuyệt đối và tương thích ngược với quy tắc đã tồn tại trong quá khứ. Kể từ WZ0.8 và Flask 0.8 bạn có thể xác định rõ ràng một bí danh cho một tuyến đường:
@app.route('/')
@app.route('/index.html', alias=True)
def index():
return ...
Trong trường hợp này nếu người dùng yêu cầu /index.html
Flask sẽ tự động đưa ra một vĩnh viễn chuyển hướng đến chỉ /
.
Điều đó không có nghĩa là một chức năng không thể bị ràng buộc để nhiều hơn một url Mặc dù vậy, nhưng trong trường hợp này, bạn sẽ cần phải thay đổi thiết bị đầu cuối:
@app.route('/')
def index():
...
app.add_url_rule('/index.html', view_func=index, endpoint='alt_index')
Hoặc cách khác:
@app.route('/')
@app.route('/index.html', endpoint='alt_index')
def index():
...
Trong trường hợp này, bạn có thể xác định một lần xem lần thứ hai dưới một tên khác. Tuy nhiên đây là điều bạn thường muốn tránh vì sau đó chức năng xem sẽ phải kiểm tra request.endpoint để xem những gì được gọi. Thay vì làm tốt hơn một cái gì đó như thế này:
@app.route('/')
def index():
return _index(alt=False)
@app.route('/index.html')
def alt_index():
return _index(alt=True)
def _index(alt):
...
Trong cả hai trường hợp thế hệ URL là url_for('index')
hoặc url_for('alt_index')
.
Bạn cũng có thể làm điều này trên mức độ hệ thống định tuyến:
@app.route('/', defaults={'alt': False})
@app.route('/index.html', defaults={'alt': True})
def index(alt):
...
Trong trường hợp này hệ url là url_for('index', alt=True)
hoặc url_for('index', alt=False)
.
Thật là một câu trả lời toàn diện và đáng yêu. Hãy cho tôi một cơ hội để xác minh và tôi sẽ đánh dấu nó được chấp nhận. Bạn có thể nên gửi nó cho những người pocoo để nó được chính thức ghi nhận. – jiggy
Ok, đã có một số rắc rối với điều này cho đến khi tôi nâng cấp lên bình 0.8 (không thành công với 0.7.2). Nó cũng dường như được chọn lên chú thích đầu tiên, không phải là chú thích cuối cùng cho tôi. Dù bằng cách nào, param điểm cuối là khóa. – jiggy