我想为我的布局模板添加一些灵活性,但我无法找到任何方法。
我正在寻找一种方法extend
我的布局模板带变量,即在模板树中向上传递变量,而不是向下传递。
# views.py
def my_view_func(request):
return render(request, "child.html")
# child.html
{% extends 'layout.html' with show_sidebar=True sidebar_width_class="width_4" %}
<div>Templates stuff here</div>
# layout.html
{% if show_sidebar %}
<div class="{{ sidebar_width_class }}">
{% block sidebar %}{% endblock %}
</div>
{% endif %}
我必须维护四个模板,但几行代码不同。例如,我有两个模板,它们通过侧边栏宽度类相互不同。我做错了吗?
答案 0 :(得分:10)
我怀疑block
首先是你正在寻找的。 p>
在基本模板中构建您的块,如下所示:
{% block sidebar_wrapper %}
{% if sidebar %}
<div class="width{{sidebar_width}}">
{% block sidebar %}{% endblock %}
</div>
{% endif %}
{% endblock sidebar_wrapper%}
在您的孩子模板上:
{% extends 'layout.html' %}
{% block sidebar_wrapper %}
{% with sidebar=True sidebar_width=4 %}
{{ block.super }}
{% endwith%}
{% endblock sidebar_wrapper%}
答案 1 :(得分:9)
您需要的是包含模板标记。您可以在另一个模板中包含一个模板,并使用特定的上下文进行渲染。
{% include 'layout.html' with sidebar=True sidebar_width=4 %}
点击此处的文档:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#include