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

Ale*_*x T 22 django django-templates

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

我正在寻找一种extend带有变量的布局模板的方法,即在模板树中传递变量,而不是向下传递.

# views.py
def my_view_func(request):
    return render(request, "child.html")
Run Code Online (Sandbox Code Playgroud)
# child.html
{% extends 'layout.html' with show_sidebar=True sidebar_width_class="width_4" %}

<div>Templates stuff here</div>
Run Code Online (Sandbox Code Playgroud)
# layout.html
{% if show_sidebar %}
    <div class="{{ sidebar_width_class }}">
        {% block sidebar %}{% endblock %}
    </div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

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

xpy*_*xpy 12

我怀疑这block是你首先要寻找的东西.

在基本模板中形成块,如下所示:

{% block sidebar_wrapper %}
    {% if sidebar %}
    <div class="width{{sidebar_width}}">
        {% block sidebar %}{% endblock %}
    </div>
    {% endif %}
{% endblock sidebar_wrapper%}
Run Code Online (Sandbox Code Playgroud)

在您的孩子模板上:

{% extends 'layout.html' %}
{% block sidebar_wrapper %}
    {% with sidebar=True sidebar_width=4 %}
        {{ block.super }}
    {% endwith%}
{% endblock sidebar_wrapper%}
Run Code Online (Sandbox Code Playgroud)


Gab*_*Muj 9

你需要的是一个包含模板标签.您可以在另一个模板中包含模板,并使用特定上下文进行渲染.

{% include 'layout.html' with sidebar=True sidebar_width=4 %}
Run Code Online (Sandbox Code Playgroud)

在这里查看文档:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#include

  • 我想扩展模板,而不是包含它. (6认同)