(Wie versprochen, meine erfahrungsbasierte Meinung.)
Wenn Sie dies verhindern können: Mischen Sie nach Möglichkeit keine Sprachen.
Nach Ihrem Beispiel scheinen Sie sich hauptsächlich zu fragen, wie dies in einer mit HTML gemischten Vorlagensprache geschehen soll, die ich behandeln werde. (Ein anderer Fall wäre das Erstellen von SQL mit einer anderen Programmiersprache, für die völlig andere Regeln erforderlich wären.)
Als Beispiel werde ich behandeln, dass Django (aber PHP, Twig usw.) meistens gleich funktioniert. Django hat logische Blöcke in den Vorlagen (öffnen {% tag %}
, schließen {% endtag %}
). HTML hat logische Blöcke (öffnen <tag>
, schließen </tag>
). Hier folge ich meistens dieser Regel: Inkrementieren nach einem offenen Tag, Dekrementieren nach einem schließenden Tag. Eine andere Regel, die ich behalte: Stellen Sie sicher, dass der Inhalt eines Django-Blocks gut formatiertes HTML ist.
Nach Ihrem Beispiel ist dies meiner Meinung nach sehr falsch:
<div>
IF FOO
<div someattribute>
ELSE
<div otherattribute>
END FOO
<p>content</p>
</div>
</div>
Warum? Weil der Inhalt von IF
kein gut formatierter HTML-Code ist. Wie soll es aussehen als?
<div>
<div
IF FOO
someattribute
ELSE
otherattribute
END FOO
>
<p>Content</p>
</div>
</div>
(Da Ihre Vorlagensprache keine nette analysierbare Syntax hat, benötigen wir die neuen Zeilen. In Django würde ich schreiben)
<div>
<div {% if foo %}someattribute{% else %}otherattribute{% endif %}>
<p>Content</p>
</div>
</div>
Stellen Sie sich als zusätzlichen Vorteil vor, dass das <div>
7 Attribute hat, von denen eines aufgrund einer bestimmten Bedingung festgelegt wird. Oder schlimmer: Was ist, wenn es 3 Attribute hat, von denen jedes von einer Bedingung abhängt? Das würde 8 verschiedene Tags ergeben.
Wenn Sie die "Regel" beachten, um den Inhalt aller Blöcke in diesem Bereich gut zu formatieren, müssen Sie sich keine Sorgen machen, dass der Einzug einer der beiden Sprachen unterbrochen wird.
Ein weiterer Punkt, den ich behandeln möchte (wenn auch etwas außerhalb des Themas): Wenn sich die öffnenden und schließenden Tags in unterschiedlichen Zeilen befinden, sollten sie das einzige Tag in dieser Zeile sein.
Falsch:
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</i>
</ul>
Stattdessen lieber
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a></li>
</ul>
oder
<ul>
<li>
This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</li>
</ul>
(Warnung: Erweiterte Verwendung): Manchmal haben Sie mehrere Wrapping-Tags. Sie können (müssen) dies als ein Tag betrachten:
<ul>
<li><div id="something"><span class="like this">
Something like this
</span></div></li>
</ul>
Mischen Sie dabei jedoch vorzugsweise keine Sprachen (Host / Gast). Und am besten nicht mit for
Loops. Und mach das nicht mit.
TL; DR für Ihre spezielle Frage.
- Sie haben eine 'Host'-Sprache (z. B. Django-Vorlage) und eine' Gast'-Sprache (z. B. HTML). Stellen Sie sicher, dass die Host-Sprachblöcke immer korrekt formatierte Gastsprachenblöcke enthalten.
- Das Öffnen jedes Blocks sollte die Einrückung erhöhen, das Schließen jedes Blocks sollte mit der Öffnung übereinstimmen.
Und die allgemeine Anmerkung, die ich (wie immer) hinzufügen sollte: Verwenden Sie Ihr eigenes Urteilsvermögen. Wissen, wann man abweicht.