Más de una ruta estática en la instancia local de Flask

¿Es posible agregar más rutas estáticas para mi instancia de dev Flask local? Quiero tener una carpeta static predeterminada para almacenar archivos js / css / images para el sitio y otra carpeta, por ejemplo, designs para mantener mis activos específicos. No quiero colocar la carpeta de designs dentro de static si existe una solución mejor.

He estado utilizando el siguiente enfoque:

 # Custom static data @app.route('/cdn/') def custom_static(filename): return send_from_directory(app.config['CUSTOM_STATIC_PATH'], filename) 

La variable CUSTOM_STATIC_PATH está definida en mi configuración.

Y en plantillas:

 {{ url_for('custom_static', filename='foo') }} 

Advertencia : no estoy realmente seguro de si es seguro;)

Puede usar un Blueprint con su propio directorio estático http://flask.pocoo.org/docs/blueprints/

Cianotipo

 blueprint = Blueprint('site', __name__, static_url_path='/static/site', static_folder='path/to/files') app.register_blueprint(blueprint) 

Modelo

 {{ url_for('site.static', filename='filename') }} 

Quería ampliar la respuesta aceptada anterior para cualquier persona que se estuviera preguntando a qué se estaba configurando app.config['CUSTOM_STATIC_PATH'] .

En mi caso, necesitaba un directorio /.well-known y entonces esto es lo que usé:

Coloqué un nuevo directorio en mi raíz de aplicación llamado well-known .
Establecí una var. De configuración así:

 CUSTOM_STATIC_PATH=app.root_path + '/well-known/' 

Entonces utilicé esa var como tal:

 @app.route('/.well-known/') def wellKnownRoute(filename): return send_from_directory(app.config['CUSTOM_STATIC_PATH'], filename, conditional=True) 

Establecer conditional=True es inteligente, esto generará 404 solicitudes donde el archivo no exista.

Y, por supuesto, si se está preguntando por qué necesita establecer un valor de configuración para la ruta dir, no lo hace. Siempre puedes usar el valor de la configuración en su lugar, dándote esto en su lugar:

 @app.route('/.well-known/') def wellKnownRoute(filename): return send_from_directory(app.root_path + '/well-known/', filename, conditional=True) 

Mis archivos para la /.well-known URL de /.well-known siempre iban a provenir de la raíz de la aplicación /well-known por lo que no tiene sentido hacerlo más complicado.

Y para tener en cuenta, será mejor que maneje este caso particular desde nginx o cualquier servidor que esté usando configurando un locking de servidor adicional y sirviendo el archivo desde fuera de la aplicación. Solo necesitaba esta configuración para un entorno de desarrollo para las pruebas.