(Come promesso, il mio parere basato sull'esperienza.)
Prima di tutto, se puoi impedirlo: fai non mescolare le lingue, quando possibile.
Come per il tuo esempio, sembra che tu ti stia principalmente chiedendo come dovrebbe essere fatto in una lingua di template mista a HTML, che tratterò. (Un altro caso sarebbe costruire SQL usando un altro linguaggio di programmazione, che richiederebbe regole completamente diverse).
Ad esempio, parlerò di Django (ma PHP, Twig, ecc.) funzionano per lo più allo stesso modo. Django ha blocchi logici nei template (aperto {% tag %}
, chiudendo {% endtag %}
). L'HTML ha blocchi logici (aperto <tag>
, chiuso </tag>
). Qui per lo più seguo questa regola: incrementa dopo un tag aperto, decrementa dopo un tag di chiusura. Un'altra regola che tengo: assicurati che il contenuto di un blocco Django sia HTML ben formattato.
Secondo il tuo esempio, a mio avviso questo è molto sbagliato:
<div>
IF FOO
<div someattribute>
ELSE
<div otherattribute>
END FOO
<p>content</p>
</div>
</div>
Perché? Perché il contenuto di IF
non è un HTML ben formattato. Che aspetto dovrebbe essere?
<div>
<div
IF FOO
someattribute
ELSE
otherattribute
END FOO
>
<p>Content</p>
</div>
</div>
(Poiché il tuo linguaggio template non ha una bella sintassi parsable, abbiamo bisogno delle nuove linee. In Django, vorrei scrivere)
<div>
<div {% if foo %}someattribute{% else %}otherattribute{% endif %}>
<p>Content</p>
</div>
</div>
Come ulteriore vantaggio, immagina che <div>
abbia 7 attributi, 1 dei quali è deciso sulla base di una condizione specifica. O peggio: cosa succede se ha 3 attributi ciascuno dei quali dipende da una condizione. Ciò darebbe 8 tag diversi.
Tenendo presente la "regola" per mantenere il contenuto di tutti i blocchi ben formattato all'interno di tale ambito, non devi preoccuparti di rompere il rientro di una delle due lingue.
Un altro punto che vorrei coprire (anche se leggermente fuori tema): se i tag di apertura e chiusura sono su linee diverse, dovrebbero essere l'unico tag su quella linea.
Sbagliato:
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</i>
</ul>
Invece, preferisci
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a></li>
</ul>
o
<ul>
<li>
This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</li>
</ul>
(Avviso: utilizzo avanzato): A volte hai più tag wrapping, potresti (non devi) considerarlo come un tag:
<ul>
<li><div id="something"><span class="like this">
Something like this
</span></div></li>
</ul>
Tuttavia, preferibilmente non mescolare le lingue (ospite / ospite) quando si fa questo. E preferibilmente non farlo con for
loops. E non farlo con.
TL; DR per la tua domanda specifica.
- Hai un 'host' (es. Django templating) e un linguaggio 'guest' (ad esempio HTML). Assicurati che i blocchi della lingua host contengano sempre blocchi di lingua ospite formattati correttamente.
- L'apertura di ogni blocco dovrebbe incrementare il rientro, la chiusura di ogni blocco dovrebbe allinearsi con l'apertura.
E la nota generale che dovrei aggiungere (come sempre): usa il tuo giudizio. Sapere quando deviare.