Django html重用

She*_*ock 1 django django-templates

Django初学者.我有一个带有徽标的基本模板,以及三个内容子部分.其中两个小节默认包含html,其余小节用于每个子页面的内容.

我现在想要创建一个不同的页面,具有完全相同的徽标,但具有不同的子部分/内容.例如,我可能只需要两个子部分,水平格式而不是垂直格式等.

所以,为此,我想我需要创建一个新模板 - 问题是我通过在新模板中将完全相同的徽标html代码作为第一个模板来违反DRY主体.

那么,在这种情况下,是否有任何设计模式可以解决重复徽标代码的问题?我正在考虑使用变量isPage1isPage2传递给模板,然后我会基于此启用/禁用块 - 这是一种可行的方法,任何人都可以提供任何替代方案吗?

非常感谢

Pab*_*ruz 6

是的,有一种模式完全符合您的需求.它在DJANGO中称为模板继承.

您基本上会有一个带有标题,徽标和主要内容占位符基本模板.类似的东西(从我上面的链接中提取):

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}My amazing site{% endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后,在您的实际网页(使用模板的网页)上,您将拥有:

{% extends "base.html" %}

{% block title %}My amazing blog{% endblock %}

{% block content %}
{% for entry in blog_entries %}
    <h2>{{ entry.title }}</h2>
    <p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

请注意,此处调用基本模板base.html.因此,在您的网页中,您可以 base.html通过放置来扩展{% extends "base.html" %}.然后,在该页面中,您只需添加特定内容block.