2012-06-06 16 views
5

Ho una pagina (situata in/games/compare /) ed è un mini gioco di confronto di immagini. Gli utenti sono mostrati due immagini e chiesto di scegliere tra di loro in risposta a una domanda. Questa pagina può ottenere immagini dal database, renderizzare un modello con javascript e css all'interno e comunicare di nuovo al database usando AJAX.Inserisci la pagina Flask in un'altra senza duplicazione del codice?

E se volessi incorporare questo gioco di voto nella pagina principale senza duplicare alcun codice? Idealmente, aggiornerei il gioco e tutte le pagine che "caratterizzano" il gioco rifletteranno anche i cambiamenti.

Mi sto impiccando su come gestire le risorse per l'intero sito in modo coerente e organizzato. Alcune pagine hanno css, javascript e sto anche usando framework come bootstrap e un framework GIS.

Vorrei impostare il gioco come un progetto? Come organizzerei le risorse (Javascript e CSS) in modo che non ci siano duplicazioni?

Attualmente, ho una pagina che mostra un modello (main.html) che ne estende un altro (base.html). Base.html include header.html, nav.html e footer.html con i blocchi impostati per il corpo e altri.

Il mio attuale approccio consiste nel rimuovere tutto al livello più basso e riassemblarlo a un livello comune più alto, il che rende la codifica molto lenta. Ad esempio, ho quel gioco di voti e in questo momento si trova in una pagina chiamata voting_game.html e ha tutto il necessario per giocare (html a pagina intera, stili e javascript inclusi). Ora, se voglio includere quel gioco su un'altra pagina, come l'indice root, l'unica soluzione che conosco è quella di rimuovere lo stile, js e la pagina intera html da voting_game.html, lasciando solo l'html necessario per il gioco . Quando creo l'indice ora, importerò l'html da voting_game.html ma dovrò importare separatamente lo stile e il javascript. Ciò significa che devo costruire ogni pagina due volte, il doppio del lavoro che devo fare. Questo processo lascia anche pochi file dappertutto, dato che sono costantemente in fase di refactoring e rende lo sviluppo solo un incubo di contabilità.

Ci deve essere un modo per farlo e rimanere organizzati ma ho bisogno del tuo aiuto per capire il modo migliore per farlo.

Grazie,

Phil

Edit: la pagina nascosta dovrebbe anche essere in grado di comunicare con la sua pagina padre (quello che viene incorporato in), o con altri pagine incorporate all'interno dello stesso genitore (i figli di un genitore dovrebbero essere in grado di parlare.Quindi, quando qualcuno gioca il gioco incorporato, guadagnano punti, che dovrebbero apparire su un'altra pagina altra parte, che si aggiornerebbe rispecchiando i punti correnti degli utenti

Questo "tabellone" sarebbe anche un widget/pagina/progetto separato che può essere incorporato e cercherà determinati pezzi dei dati per funzionare.

risposta

1

Per riutilizzare un blocco di HTML, è possibile utilizzare il tag {% include %} di Jinja. Se questo è troppo limitante, anche i macro Jinja sono adatti. È possibile definire le macro in un file separato e importarle con {% import "path/to/macros.html" as my_macros %}.

Flask-Assets può aiutare con l'organizzazione delle risorse.

Per quanto riguarda l'uso di Cianografie, sì è necessario utilizzarle. Ma si applicano principalmente al codice Python e i modelli HTML sono organizzati in un regno diverso, quindi forse il loro uso non è correlato qui.

Tuttavia non è sempre possibile rimuovere tutte le duplicazioni.Se il tuo gioco deve interessare tre posizioni distanti dell'HTML generato dal server, questo è un bit del codice del template da copiare in ogni modello che include il tuo gioco.

Problemi correlati