Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

107
Vistas
Cómo excluir rutas del hashing con ManifestStaticFilesStorage

Estoy involucrado en una aplicación que usa ruido blanco para servir archivos estáticos. Está configurado para usar CompressedManifestStaticFilesStorage que, a su vez, usa ManifestStaticFilesStorage .

Por archivos estáticos, me refiero a los archivos estáticos que proporcionamos y bibliotecas como folletos de terceros.

La clase ManifestStaticFilesStorage , proporcionada por Django, cambiará el nombre de los archivos para incluir un hash. Por cachebusting. Filtra recursos y cambia referencias sin hash a archivos para incluir el hash.

Esto a su vez rompe una función en el folleto:

 _detectIconPath: function () { var el = DomUtil.create('div', 'leaflet-default-icon-path', document.body); var path = DomUtil.getStyle(el, 'background-image') || DomUtil.getStyle(el, 'backgroundImage'); // IE8 document.body.removeChild(el); return path.indexOf('url') === 0 ? path.replace(/^url\([\"\']?/, '').replace(/marker-icon\.png[\"\']?\)$/, '') : ''; }

El problema es que el valor de la path se parece a:

 url("https://example.org/static/path/leaflet/dist/images/marker-icon.2273e3d8ad92.png")

Como el nombre del archivo no coincide, el segundo reemplazo no hará nada. Esto a su vez devolverá:

 https://example.org/static/path/leaflet/dist/images/marker-icon.2273e3d8ad92.png")

Cuando el folleto intenta agregar un nombre de archivo a este "directorio", obtenemos:

 https://example.org/static/path/leaflet/dist/images/marker-icon.2273e3d8ad92.png")marker-icon.png

Lo cual obviamente está mal.

¿Entonces, cuál es la solución? Me han informado que no deberíamos tratar de codificar nombres de archivo de paquetes de terceros, podría haber otras fallas. Sin embargo, no veo ninguna opción para que ManifestStaticFilesStorage excluya ciertos directorios del hash.

Creé la siguiente clase para tratar de solucionar esto. Hago referencia a esta clase en la configuración en lugar de CompressedManifestStaticFilesStorage .

 class MyStorage(CompressedManifestStaticFilesStorage): """ This class overrides the built in class and turns off file name hashing for selected directories. """ def _nonhashed_name_func(self, name, hashed_files=None): name = posixpath.normpath(name) cleaned_name = self.clean_name(name) return cleaned_name def _url(self, hashed_name_func, name, force=False, hashed_files=None): split = name.split("/") if split[0] in ['bower_components', 'node_modules']: hashed_name_func = self._nonhashed_name_func return super()._url(hashed_name_func=hashed_name_func, name=name, force=force, hashed_files=hashed_files)

Esto funciona, sin embargo, parece una solución algo poco elegante. ¿Alguien aquí tiene mejores sugerencias?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Encontré esta página que describe problemas similares, en el contexto de Angular2:

https://www.npmjs.com/package/@asymmetrik/angular2-leaflet#a-note-about-markers

En el caso específico del folleto, la solución parece ser anular la ruta del ícono predeterminado. Como estoy usando vue2-leaflet, esto se puede hacer usando:

 <v-icondefault :image-path="path"></v-icondefault>

Según el ejemplo proporcionado con el código fuente.

about 4 years ago · Santiago Trujillo Denunciar

0

El proyecto Leaflet respalda la compatibilidad con leaflet-defaulticon como una solución oficial para este problema.

Recupere todas las opciones de íconos predeterminados de folletos de CSS, en particular, todas las URL de imágenes de íconos, para mejorar la compatibilidad con paquetes y marcos que modifican las URL en CSS. En particular para webpack (con cargadores de estilo, css, archivos y url), Rails Asset Pipeline y Django pipeline. Debería resolver todos los casos de uso vinculados al problema #4968 . (Fuente)

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda