我正在编写一个应用程序,用户可以从中选择一种用于数据分析的工具,并在主页面板上打开它.是否可以使用django"extends"并将每个工具定义在不同的文件中?
我最喜欢的最小例子是这样的:
base.html文件
<div>
{% block left_panel %}
left block
{% endblock content%}
</div>
<div>
{% block right_panel %}
right block
{% endblock %}
</div>
Run Code Online (Sandbox Code Playgroud)
和示例left_panel和right_panel工具:
left1.html
{% extends "base.html" %}
{% block left_panel %}
<p>TEST left 1</p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
right1.html
{% extends "base.html" %}
{% block right_panel %}
<p>TEST right 1</p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
有没有办法渲染base.html,两个块都覆盖?
我相信实现您的要求的最佳方法是创建一个扩展 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个.假设根据用户选择的工具,你的视图将left_tool和right_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 - 相反,您可以生成要包含在视图中的模板名称并将其直接传递给模板,或者使用自定义节点等.