在基本模板中添加类的DRY方法?

时间:2015-12-11 21:34:53

标签: 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>

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

1 个答案:

答案 0 :(得分:6)

只需使用默认内容添加可覆盖的块:

<body class="{% block body_class %}noscroll{% endblock %}">

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

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

# noscroll.html

{% extends 'base.html' %}

{% block body_class %}{# empty to override #}{% endblock %}

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