(Como prometí, mi opinión basada en la experiencia).
En primer lugar, si puede evitarlo: no mezcle idiomas, siempre que sea posible.
Según su ejemplo, parece que en su mayoría se está preguntando cómo debería hacerse en un lenguaje de plantillas mezclado con HTML, que cubriré. (Otro caso sería construir SQL usando otro lenguaje de programación, lo que requeriría reglas completamente diferentes).
Como ejemplo, cubriré Django (pero PHP, Twig, etc.) funcionan casi de la misma manera. Django tiene bloques lógicos en las plantillas (abrir {% tag %}
, cerrar {% endtag %}
). HTML tiene bloques lógicos (abrir <tag>
, cerrar </tag>
). Aquí sigo principalmente esta regla: aumentar después de una etiqueta abierta, disminuir después de una etiqueta de cierre. Otra regla que mantengo: asegúrese de que el contenido de un bloque Django sea HTML bien formateado.
Según su ejemplo, en mi opinión esto está muy mal:
<div>
IF FOO
<div someattribute>
ELSE
<div otherattribute>
END FOO
<p>content</p>
</div>
</div>
¿Por qué? Porque el contenido del IF
no es un HTML bien formateado. ¿Qué aspecto debería tener?
<div>
<div
IF FOO
someattribute
ELSE
otherattribute
END FOO
>
<p>Content</p>
</div>
</div>
(Debido a que su lenguaje de plantilla no tiene una buena sintaxis analizable, necesitamos las nuevas líneas. En Django, escribiría)
<div>
<div {% if foo %}someattribute{% else %}otherattribute{% endif %}>
<p>Content</p>
</div>
</div>
Como beneficio adicional, imagine que <div>
tiene 7 atributos, 1 de los cuales se decide según una condición específica. O peor: ¿qué pasa si tiene 3 atributos, cada uno de los cuales depende de una condición? Eso le daría 8 etiquetas diferentes.
Teniendo en cuenta la "regla" para mantener el contenido de todos los bloques bien formateados dentro de ese alcance, no tiene que preocuparse por romper la sangría de ninguno de los idiomas.
Otro punto que me gustaría cubrir (aunque ligeramente fuera de tema): si las etiquetas de apertura y cierre están en diferentes líneas, deberían ser la única etiqueta en esa línea.
Incorrecto:
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</i>
</ul>
En cambio, prefiera
<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>
(Advertencia: uso avanzado): a veces tiene varias etiquetas de ajuste, puede (no debe) considerar esto como una etiqueta:
<ul>
<li><div id="something"><span class="like this">
Something like this
</span></div></li>
</ul>
Sin embargo, preferiblemente no mezcle idiomas (host / invitado) al hacer esto. Y preferiblemente no hagas esto con for
bucles. Y no hagas esto con.
TL; DR para su pregunta específica.
- Tiene un 'host' (por ejemplo, plantillas Django) y un lenguaje 'invitado' (por ejemplo, HTML). Asegúrese de que los bloques de idioma del host siempre contengan bloques de idioma invitados correctamente formateados.
- La apertura de cada bloque debe incrementar la sangría, el cierre de cada bloque debe alinearse con la apertura.
Y la nota general que debo agregar (como siempre): usa tu propio juicio. Sepa cuándo desviarse.