我找到了一个 hacky 方法来做到这一点。我对它不是很满意。我发现我可以使用简单的if
块来切换我想用include
标签渲染模板的哪些部分。这使我可以分别包含我的参考资料和内容。(注意,我可以通过将我的引用和内容分成单独的文件来解决这个问题。但这似乎比这个解决方案更乏味。)
我比当前的答案更喜欢这个解决方案,因为它允许我的共享模板与其他模板隔离。在使用可以混合和匹配的功能时,保持这种模块化设计很重要(这是我想用我的共享模板做的)。
模板:
{% extends "layout.html" %}
{% load staticfiles %}
{% block references %}
<link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% include "mySharedTemplate.html" with references="True" %}
{% endblock %}
...
{% include "mySharedTemplate.html" with content="True" %}
...
共享模板:
{% if references %}
{% load staticfiles %}
<link rel="stylesheet" href="{% static "mySharedTemplateStylesheet.css" %}" type="text/css">
{% endif %}
{% if content %}
...
{% endif %}
为了说明为什么我认为我的模块化设计很重要:
想象一下,我有许多共享模板和许多常规模板,每个模板都以不同的方式使用共享模板。我的模块化方法使常规模板可以轻松地以最适合它们的灵活方式使用共享模板。
模板 2:
{% extends "layout.html" %}
{% load staticfiles %}
{% block references %}
<link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% include "mySharedTemplate.html" with references="True" %}
{% include "mySharedTemplate2.html" with references="True" %}
{% endblock %}
...
{% include "mySharedTemplate.html" with content="True" %}
{% include "mySharedTemplate2.html" with content="True" %}
...
模板 3:
{% extends "layout.html" %}
{% load staticfiles %}
{% block references %}
<link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% include "mySharedTemplate2.html" with references="True" %}
{% include "mySharedTemplate3.html" with references="True" %}
{% include "mySharedTemplate4.html" with references="True" %}
{% endblock %}
...
{% include "mySharedTemplate4.html" with content="True" %}
{% include "mySharedTemplate3.html" with content="True" %}
{% include "mySharedTemplate2.html" with content="True" %}
...
请注意,模板 2 和模板 3 可以以适合它们的方式使用共享模板,而无需太多样板代码。