(Như đã hứa, ý kiến dựa trên kinh nghiệm của tôi.)
Trước hết, nếu bạn có thể ngăn chặn nó: không trộn lẫn các ngôn ngữ, bất cứ khi nào có thể.
Theo ví dụ của bạn, có vẻ như bạn chủ yếu tự hỏi về cách nó nên được thực hiện trong một ngôn ngữ tạo khuôn mẫu trộn với HTML, mà tôi sẽ trình bày. (Một trường hợp khác sẽ xây dựng SQL bằng ngôn ngữ lập trình khác, yêu cầu các quy tắc hoàn toàn khác nhau).
Ví dụ, tôi sẽ trình bày Django (nhưng PHP, Twig, v.v.) hoạt động gần như giống nhau. Django có các khối logic trong các mẫu (mở {% tag %}
, đóng {% endtag %}
). HTML có các khối logic (mở <tag>
, đóng </tag>
). Ở đây tôi chủ yếu tuân theo quy tắc này: tăng sau thẻ mở, giảm sau thẻ đóng. Một quy tắc khác tôi giữ: đảm bảo rằng nội dung của khối Django là HTML được định dạng tốt.
Theo ví dụ của bạn, theo tôi điều này rất sai:
<div>
IF FOO
<div someattribute>
ELSE
<div otherattribute>
END FOO
<p>content</p>
</div>
</div>
Tại sao? Bởi vì nội dung của IF
HTML không được định dạng tốt. Nó sẽ trông như thế nào hơn?
<div>
<div
IF FOO
someattribute
ELSE
otherattribute
END FOO
>
<p>Content</p>
</div>
</div>
(Vì ngôn ngữ mẫu của bạn không có cú pháp phân tích cú pháp đẹp, chúng tôi cần các dòng mới. Trong Django, tôi sẽ viết)
<div>
<div {% if foo %}someattribute{% else %}otherattribute{% endif %}>
<p>Content</p>
</div>
</div>
Là một lợi ích bổ sung, hãy tưởng tượng rằng <div>
có 7 thuộc tính, 1 trong số đó được quyết định dựa trên một điều kiện cụ thể. Hoặc tệ hơn: nếu nó có 3 thuộc tính thì mỗi thuộc tính phụ thuộc vào một điều kiện. Điều đó sẽ cung cấp cho 8 thẻ khác nhau.
Hãy ghi nhớ "quy tắc" để giữ cho nội dung của tất cả các khối được định dạng tốt trong phạm vi đó, bạn không phải lo lắng về việc phá vỡ thụt lề của một trong hai ngôn ngữ.
Một điểm khác mà tôi muốn đề cập (mặc dù hơi lạc đề): Nếu các thẻ mở và đóng nằm trên các dòng khác nhau, chúng sẽ là thẻ duy nhất trên dòng đó.
Sai lầm:
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</i>
</ul>
Thay vào đó, thích
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a></li>
</ul>
hoặc là
<ul>
<li>
This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</li>
</ul>
(Cảnh báo: sử dụng nâng cao): Đôi khi bạn có nhiều thẻ gói, bạn có thể (không phải) coi đây là một thẻ:
<ul>
<li><div id="something"><span class="like this">
Something like this
</span></div></li>
</ul>
Tuy nhiên, tốt nhất là không trộn lẫn các ngôn ngữ (máy chủ / khách) khi thực hiện việc này. Và tốt nhất là đừng làm điều này với for
các vòng lặp. Và đừng làm điều này với.
TL; DR cho câu hỏi cụ thể của bạn.
- Bạn có một 'máy chủ' (ví dụ: khuôn mẫu Django) và ngôn ngữ 'khách' (ví dụ: HTML). Đảm bảo các khối ngôn ngữ máy chủ luôn chứa các khối ngôn ngữ khách được định dạng chính xác.
- Việc mở mỗi khối nên tăng độ thụt, đóng của mỗi khối sẽ thẳng hàng với việc mở.
Và lưu ý chung mà tôi nên thêm (như mọi khi): sử dụng phán đoán của riêng bạn. Biết khi nào nên đi chệch hướng.