2

我想把我所有的link标签放在<head>.

但是,当我通过内置标签包含共享模板时,我不知道如何呈现DOMlink中的所有标签。因此,无论我碰巧包含我的共享模板,我的标签都会呈现。我在下面添加了代码以更好地说明我的问题。headincludelink

布局:

<html>
<head>
    {% block references %}{% endblock %}
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

使用模板扩展布局:

{% extends "layout.html" %}
{% load staticfiles %}
{% block references %}
    <link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% endblock %}
...
{% include "mySharedTemplate.html" %}
...

共享模板。请注意,此模板在我的几个但不是所有模板之间共享:

{% load staticfiles %}
<link rel="stylesheet" href="{% static "mySharedTemplateStylesheet.css" %}" type="text/css">
...

有没有办法在使用共享模板时将我的所有link标签放在我的 DOM 中?head有完全不同或更好的方法来做到这一点吗?我的第一个 django 项目已经一周了,所以即使是基本功能的建议也可能对我有所帮助!

4

4 回答 4

1

我想你正在寻找{{block.super}}

例如 Layout.html:

<html>
<head>
{% load staticfiles %}
{% block references %}
   <link rel="stylesheet" href="{% static "mySharedTemplateStylesheet.css" %}" type="text/css">

{% endblock %}
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

在 Template.html 中:

{% extends "layout.html" %}
{% load staticfiles %}
{% block references %}
    {{block.super}}
    <link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% endblock %}

如果你不想mySharedTemplateStylesheet.css为你所有的页面使用你只是不要{{block.super}}像 Template2.html 那样使用:

 {% extends "layout.html" %}
    {% load staticfiles %}
    {% block references %}
        <link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
    {% endblock %}
于 2013-06-21T03:37:17.880 回答
1

布局.html:

<html>
<head>
    {% block references %}{% endblock %}
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

布局共享css.html:

{% extends "layout.html" %}
{% load staticfiles %}
{% block references %}
    <link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% endblock %}

没有共享模板的模板:

{% extends "layout.html" %}
{% load staticfiles %}
{% block references %}
    <link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% endblock %}

带有共享模板的模板:

{% extends "layout-shared-css.html" %}
{% load staticfiles %}
{% block references %}
    {{ block.super }}
    <link rel="stylesheet" href="{% static "myStylesheet.css" %}" type="text/css">
{% endblock %}
于 2013-06-21T03:39:40.283 回答
0

我找到了一个 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 可以以适合它们的方式使用共享模板,而无需太多样板代码。

于 2013-06-21T04:32:18.487 回答
0

使用verbatim标签停止模板引擎将您的标签解释为他的标签。

{% verbatim %}
    {{if dying}}Still alive.{{/if}}
{% endverbatim %}

Django 和 Chartjs 模板冲突

于 2017-12-04T13:59:11.490 回答