Called by :meth:`.url_for` if a :exc:`~werkzeug.routing.BuildError` was raised. If this returns a value, it will be returned by ``url_for``, otherwise the error will be re-raised. Each function in :attr:`url_build_error_handlers` is called with ``error``, ``e
(
self, error: BuildError, endpoint: str, values: dict[str, t.Any]
)
| 930 | func(endpoint, values) |
| 931 | |
| 932 | def handle_url_build_error( |
| 933 | self, error: BuildError, endpoint: str, values: dict[str, t.Any] |
| 934 | ) -> str: |
| 935 | """Called by :meth:`.url_for` if a |
| 936 | :exc:`~werkzeug.routing.BuildError` was raised. If this returns |
| 937 | a value, it will be returned by ``url_for``, otherwise the error |
| 938 | will be re-raised. |
| 939 | |
| 940 | Each function in :attr:`url_build_error_handlers` is called with |
| 941 | ``error``, ``endpoint`` and ``values``. If a function returns |
| 942 | ``None`` or raises a ``BuildError``, it is skipped. Otherwise, |
| 943 | its return value is returned by ``url_for``. |
| 944 | |
| 945 | :param error: The active ``BuildError`` being handled. |
| 946 | :param endpoint: The endpoint being built. |
| 947 | :param values: The keyword arguments passed to ``url_for``. |
| 948 | """ |
| 949 | for handler in self.url_build_error_handlers: |
| 950 | try: |
| 951 | rv = handler(error, endpoint, values) |
| 952 | except BuildError as e: |
| 953 | # make error available outside except block |
| 954 | error = e |
| 955 | else: |
| 956 | if rv is not None: |
| 957 | return rv |
| 958 | |
| 959 | # Re-raise if called with an active exception, otherwise raise |
| 960 | # the passed in exception. |
| 961 | if error is sys.exc_info()[1]: |
| 962 | raise |
| 963 | |
| 964 | raise error |