在基本模板中向<body>添加类的DRY方法?

dvt*_*tan 4 django django-templates

这是我的一般结构base.html:

<html>
    <head>
    </head>

    <body class="noscroll">
        <nav class="navbar navbar-static-top navbar-dark bg-inverse">
        </nav>
        {% block content %}
        {% endblock content %}
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

在某些页面上,我想要的noscroll是基本上overflow-y: hidden;但我也有需要滚动的页面的类.我可以将导航栏移动到它自己的片段并插入,但这样的方法似乎不能令人满意.或者我可以分开base_noscroll.html,但这可能会导致不一致,所以我必须嵌套两个模板,这将再次令人不满意.

Bra*_*don 7

只需添加具有默认内容的覆盖块:

<body class="{% block body_class %}noscroll{% endblock %}">
Run Code Online (Sandbox Code Playgroud)

那么noscroll类就在那里,或者你可以在扩展的模板中覆盖它base.html.Django模板块几乎可以放在任何地方; 他们不必包装整个HTML标签.

如果你发现自己重复覆盖了这个块,你总是可以添加另一个扩展base.html并覆盖的模板,然后扩展它:

# noscroll.html

{% extends 'base.html' %}

{% block body_class %}{# empty to override #}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

然后在后续页面中,您可以扩展任一模板.您需要多大的灵活性始终取决于您.