有没有办法将变量传递给'扩展' Django中的模板?

时间:2016-05-01 06:33:31

标签: django django-templates

我想为我的布局模板添加一些灵活性,但我无法找到任何方法。

我正在寻找一种方法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 %}

我必须维护四个模板,但几行代码不同。例如,我有两个模板,它们通过侧边栏宽度类相互不同。我做错了吗?

2 个答案:

答案 0 :(得分:10)

我怀疑block首先是你正在寻找的。

在基本模板中构建您的块,如下所示:

{% 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