Jam*_*Lin 14 django templates indentation
Python有PEP 8,但我还没有看到django模板的首选缩进指南.
我的意思是,我通常缩进这样的块:
<span>outside</span>
{% if condition %}
<span>within condition</span>
{% endif %}
<span>outside</span>
Run Code Online (Sandbox Code Playgroud)
虽然这在编辑器上看起来不错,但它会在视图源上看起来像这样:
<span>outside</span>
<span>within condition</span>
<span>outside</span>
Run Code Online (Sandbox Code Playgroud)
它甚至会在HTML缩进中看起来更糟糕,见下文:
<div>
<span>outside</span>
{% if condition %}
<span>within condition</span>
{% endif %}
</div>
Run Code Online (Sandbox Code Playgroud)
会变成:
<div>
<span>outside</span>
<span>within condition</span>
</div>
Run Code Online (Sandbox Code Playgroud)
虽然我同意在编辑器中更好的布局更重要,但我也对生成的凌乱的HTML源代码感到妄想.
我目前在 django 模板指南中遵循我自己的约定以确保一致性。规则很简单:
不管你有多少嵌套的 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>
Run Code Online (Sandbox Code Playgroud)
我使用 2 个空格作为 HTML 缩进,因为 HTML 往往有很深的嵌套。
对于 Vim 用户,请注意语法不是
html
buthtmldjango
因此我
~/.vimrc
看起来像:Run Code Online (Sandbox Code Playgroud)autocmd Filetype htmldjango setlocal ts=2 sts=2 sw=2 expandtab
根据您的编辑器,有多种方法可以为 HTML 文件设置特定的缩进宽度。
\n\n至于Django标签,不添加缩进级别实际上是一件好事。看那个例子:
\n\n<ul>\n {% for item in items %}\n <li>{{\xc2\xa0item }}</li>\n {% endfor %}\n</ul>\n
Run Code Online (Sandbox Code Playgroud)\n\n会被渲染成这样:
\n\n<ul>\n <li>Bacon</li>\n <li>Ninja</li>\n <li>Tumbleweed</li>\n</ul>\n
Run Code Online (Sandbox Code Playgroud)\n\n我们不希望有两级缩进。反而:
\n\n{% block content %}\n<ul>\n {% for item in items %}\n <li>{{\xc2\xa0item }}</li>\n {% endfor %}\n</ul>\n{% endblock content %}\n
Run Code Online (Sandbox Code Playgroud)\n