静态文件和django模板

时间:2013-06-21 03:27:59

标签: python css django dom django-templates

我想将所有link标记放在<head>

                           

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

布局:

<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 个答案:

答案 0 :(得分: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,则不要像使用Template2.html那样使用{{block.super}}

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

答案 1 :(得分:1)

的layout.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 %}

答案 2 :(得分:0)

我找到了一种做到这一点的黑客方法。我对它并不十分满意。我发现我可以使用简单的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可以使用适合它们的方式使用共享模板,而不需要太多的样板代码。

答案 3 :(得分:0)

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

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

Django and Chartjs template conflict