19

Python 用の PEP 8 がありますが、django テンプレートの優先インデント ガイドラインは見たことがありません。

つまり、通常は次のようにブロックをインデントします。

<span>outside</span>
{% if condition %}
    <span>within condition</span>
{% endif %}
<span>outside</span>

これはエディターでは見栄えがしますが、次のようにソースを表示するとがらくたに見えます。

<span>outside</span>
  <span>within condition</span>
<span>outside</span>

HTML のインデント内ではさらに見栄えが悪くなります。以下を参照してください。

<div>
    <span>outside</span>
    {% if condition %}
        <span>within condition</span>
    {% endif %}
</div>

となります:

<div>
    <span>outside</span>
        <span>within condition</span>
</div>

エディターのレイアウトを改善することの方がはるかに重要であることに同意しますが、生成された乱雑な HTML ソース コードについても偏執的になります。

4

4 に答える 4

6

私は現在、一貫性の問題について、djangoテンプレートガイドラインの独自の規則に従っています。ルールは簡単です:

  1. Django タグはインデント レベルを上げません
  2. HTML タグインデント レベルを増やします

ネストされた Django タグの数に関係なく、同じレベルのインデントにする必要があります。これは、混乱を避けるために可能な限り最小化する必要があるテンプレートにロジックを配置することのトレードオフと考えています。

<html>
<body>
  <ul>
    {% if condition %}
    {% for item in menu_item %}
    <li>{{ item }}</li>
    {% endfor %}      
    {% endif %}
  </ul>
  <main>
    {% block content %}
    <p>Hello World</p>
    {% endblock content %}
  </main>
</body>
</html>

サイドノート

HTML は非常に深い入れ子になる傾向があるため、HTML のインデントに 2 つのスペースを使用しています。

htmlVim ユーザーの方は、構文が異なることに注意してください。htmldjango

したがって、私~/.vimrcのものは次のようになります。

autocmd Filetype htmldjango setlocal ts=2 sts=2 sw=2 expandtab
于 2015-06-24T19:06:44.723 に答える
1

エディターによっては、HTML ファイルに特定のインデント幅を設定する方法があります。

Django タグに関しては、インデント レベルを追加しないのは実際には良いことです。その例を参照してください:

<ul>
    {% for item in items %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>

次のようにレンダリングされます。

<ul>
        <li>Bacon</li>
        <li>Ninja</li>
        <li>Tumbleweed</li>
</ul>

また、2 レベルのインデントは必要ありません。その代わり:

{% block content %}
<ul>
    {% for item in items %}
    <li>{{ item }}</li>
    {% endfor %}
</ul>
{% endblock content %}
于 2013-08-27T08:17:40.453 に答える
0

古い質問を復活させて申し訳ありませんが、Emacs のweb-mode.elが Django テンプレートをインデントする方法については、ここで言及する価値があると思います。

{% block content %}
    <div
        id="1"
        class="fancy"
    >
        {% if link %}
            <a href="{{ link }}">
                Click here
            </a>
        {% endif %}
    </div>
{% endblock %}

ご覧のとおり、Django タグと HTML タグ、および複数行の HTML タグの両方をインデントします。タグもサポートし<style>ています。<script>実際、私はこの動作がとても好きで、スタンドアロンのインデンターであるDjHTMLと、Web モードと同じインデント規則を使用する pre-commit フックを作成しました。

于 2021-05-24T17:40:09.293 に答える