如何使用两个不同的文件扩展base.html?

时间:2014-06-23 10:10:10

标签: django django-templates

我正在编写一个应用程序,用户可以从中选择一种用于数据分析的工具,并在主页面板上打开它。是否可以使用django“extends”并将每个工具定义在不同的文件中?

最令人兴奋的例子就是:

base.html文件

  <div>
  {% block left_panel %}
  left block
  {% endblock content%}
  </div>
  <div>
    {% block right_panel %}
    right block
    {% endblock %}
  </div>

并示例left_panel和right_panel工具:

left1.html

{% extends "base.html" %}
{% block left_panel %}
<p>TEST left 1</p>
{% endblock %}

right1.html

{% extends "base.html" %}
{% block right_panel %}
<p>TEST right 1</p>
{% endblock %}

有两种方法可以覆盖 base.html 吗?

1 个答案:

答案 0 :(得分:7)

我认为实现您的要求的最佳方式是创建扩展 base.html和包含 left1.html和right1.html的新模板。像这样:

{% extends "base.html" %}

{% block left_panel %}
    {% include "left1.html" %}
{% endblock content%}

{% block right_panel %}
    {% include "right1.html" %}
{% endblock %}

根据OP的评论进行更新:实际上您只需要一个可配置的模板,而不是100个。假设根据用户选择的工具,您的视图会通过{ {1}}和left_tool上下文变量到您的模板。现在,您可以轻松地执行以下操作:

{% block left_panel %}
    {% if left_tool == "tool1" %}
        {% include "left1.html" %}
    {% elif left_tool == "tool2" %}}
        {% include "left2.html" %}
    etc ...
    {% else %}
        {% include "left10.html" %}
    {% endif %}
{% endblock content%}

您将对右侧面板执行相同的操作。当然上面有点天真并且绝对不是DRY - 相反,您可以生成要包含在视图中的模板名称并将其直接传递给模板,或者使用自定义节点等。