2012-06-06 7 views
5

Tengo una página (ubicada en/juegos/comparar /) y es un juego de comparación de imágenes mini. A los usuarios se les muestran dos imágenes y se les pide que seleccionen entre ellas en respuesta a una pregunta. Esta página puede obtener imágenes de la base de datos, renderizar una plantilla con javascript y css dentro y comunicarse de regreso a la base de datos usando AJAX.¿Incrustar la página de Flask en otra sin duplicación de código?

¿Y ahora si quiero insertar este juego de votación en la página principal sin duplicar ningún código? Idealmente, actualizaría el juego y todas las páginas que "presentan" el juego también reflejarán los cambios.

Me estoy obsesionando con la forma de administrar los activos para todo el sitio de una manera coherente y organizada. Algunas páginas tienen css, javascript y también estoy usando frameworks como bootstrap y un framework GIS.

¿Establecería el juego como un plano? ¿Cómo organizaría los activos (Javascript y CSS) para que no haya duplicaciones?

Actualmente, tengo una página que muestra una plantilla (main.html) que extiende otra (base.html). Base.html incluye header.html, nav.html y footer.html con bloques configurados para body y otros.

Mi enfoque actual es eliminar todo en el nivel más bajo y volver a montarlo en el nivel común más alto, lo que hace que la codificación sea realmente lenta. Por ejemplo, tengo ese juego de votación y ahora mismo está ubicado en una página llamada voting_game.html y tiene todo lo que necesita para jugar (página completa html, estilos y javascript incluidos). Ahora, si quiero incluir ese juego en otra página, como el índice raíz, la única solución que conozco es quitar el estilo, js y html de página completa de voting_game.html, dejando solo el html necesario para que el juego se ejecute . Cuando esté creando el índice ahora, importaré el html de voting_game.html pero tendré que importar el estilo y javascript por separado. Esto significa que tengo que construir cada página dos veces, lo que equivale al doble del trabajo que necesito hacer. Este proceso también deja pequeños archivos en todas partes, ya que estoy refabricando constantemente y hace que el desarrollo sea solo una pesadilla de contabilidad.

Tiene que haber una manera de hacer esto y mantenerse organizado, pero necesito su ayuda para entender la mejor manera de hacerlo.

Gracias,

Phil

Editar: La página incrustado también debe ser capaz de comunicarse con su página padre (el que se está incrustado en), o con otras páginas integradas dentro del mismo padre (los hijos de un padre deberían poder hablar. Por lo tanto, cuando alguien juega el juego incrustado, ganan puntos, que deberían aparecer en otra parte de otra página, que se actualizaría reflejando los puntos actuales de los usuarios.

Este "Cuadro de puntuación" también sería un widget/página/plano separado que se puede incrustar y buscará ciertas piezas de datos para funcionar

Respuesta

1

Para volver a utilizar un fragmento de HTML, puede usar la etiqueta {% include %} de Jinja. Si eso es demasiado limitante, las macros de Jinja también son muy adecuadas. Puede definir sus macros en un archivo separado e importarlas con {% import "path/to/macros.html" as my_macros %}.

Flask-Assets puede ayudar con la organización de sus activos.

En cuanto al uso de Blueprints, sí debe usarlos. Pero en su mayoría se aplican al código Python y las plantillas HTML están organizadas en un ámbito diferente, por lo que tal vez su uso no esté relacionado aquí.

Sin embargo, no siempre se pueden eliminar todas las duplicaciones.Si su juego necesita afectar tres ubicaciones distantes del HTML generado por el servidor, eso es pedazos de código de plantilla para copiar en cada plantilla que incluye su juego.

Cuestiones relacionadas