Bên trong một kế hoạch chi tiết bình, tôi có:Sử dụng Bản thiết kế Flask, cách khắc phục url_for do vi phạm nếu tên miền phụ được chỉ định?
frontend = Blueprint('frontend', __name__)
và các tuyến đường đến chức năng chỉ số của tôi là:
@frontend.route('/')
def index():
#code
này hoạt động tốt, nhưng tôi đang cố gắng để thêm một tên miền phụ để các tuyến đường, như vậy:
@frontend.route('/', subdomain='<var>')
def index(var):
Nhưng điều này phá vỡ các ứng dụng và trình duyệt spits ra (trong số những thứ khác):
werkzeug.routing.BuildError
BuildError: ('frontend.index', {}, None)
frontend.index được gọi ra trong mã của tôi ở một vài nơi trong một url_for ('frontend.index')
Làm thế nào tôi có thể nhận được url_for để làm việc khi tôi đang trong đó có một tên miền phụ? Điều duy nhất trong các tài liệu tôi có thể tìm thấy và tôi nghĩ rằng có thể có liên quan là này theo http://flask.pocoo.org/docs/api/:
Để tích hợp các ứng dụng, Flask có một cái móc để đánh chặn URL xây dựng lỗi qua Flask.build_error_handler. Các kết quả chức năng url_for trong một BuildError khi ứng dụng hiện tại không có một URL cho các điểm cuối và các giá trị được cho trước là . Khi đó, current_app gọi số build_error_handler của nó nếu nó không phải là None, có thể trả về một chuỗi thành sử dụng làm kết quả của url_for (thay vì url_for‘s mặc định tăng ngoại lệ BuildError) hoặc tăng lại ngoại lệ. Một ví dụ:
def external_url_handler(error, endpoint, **values):
"Looks up an external URL when `url_for` cannot build a URL."
# This is an example of hooking the build_error_handler.
# Here, lookup_url is some utility function you've built
# which looks up the endpoint in some external URL registry.
url = lookup_url(endpoint, **values)
if url is None:
# External lookup did not have a URL.
# Re-raise the BuildError, in context of original traceback.
exc_type, exc_value, tb = sys.exc_info()
if exc_value is error:
raise exc_type, exc_value, tb
else:
raise error
# url_for will use this result, instead of raising BuildError.
return url
app.build_error_handler = external_url_handler
Tuy nhiên, tôi mới để trăn (và lập trình) và không thể hiểu được nơi tôi sẽ đặt mã này hay thế nào tôi sẽ nhận được rằng hàm để gọi khi một builderror xảy ra.
Bất kỳ thông tin chi tiết nào sẽ được đánh giá cao :)
Các bạn đã thử thêm '' _external = True'' để url_for của bạn() gọi? –
@chrickso: Xem câu trả lời của tôi. Có vẻ như, bạn chỉ cần cung cấp các tên phương thức khác nhau. – pyfunc