from functools import wraps from flask import request, render_template, url_for from flask import redirect as _redirect def templated(template=None): def decorator(f): @wraps(f) def decorated_function(*args, **kwargs): template_name = template if template_name is None: template_name = request.endpoint \ .replace('.', '/') + '.jinja' ctx = f(*args, **kwargs) if ctx is None: ctx = {} elif not isinstance(ctx, dict): return ctx return render_template(template_name, **ctx) return decorated_function return decorator def redirect (target, **kwargs): code = kwargs.pop("_code", None) url = url_for(target, **kwargs) if code is None: return _redirect(url) else: return _redirect(url, code)