1

ジャンゴ初心者です。ロゴ付きの基本テンプレートと、コンテンツ用の 3 つのサブセクションがあります。サブセクションのうち 2 つにはデフォルトで html が含まれ、残りのサブセクションは各子ページのコンテンツ用です。

まったく同じロゴで、サブセクション/コンテンツが異なる別のページを作成したいと思います。たとえば、縦ではなく横にフォーマットされた 2 つのサブセクションのみが必要な場合があります。

そのため、新しいテンプレートを作成する必要があると思います。問題は、最初のテンプレートとまったく同じロゴ HTML コードを新しいテンプレートに含めることで、DRY プリンシパルに違反していることです。

この場合、ロゴコードを繰り返すというこの問題を解決するデザインパターンはありますか? テンプレートのような変数isPage1isPage2テンプレートに渡された変数を使用することを考えていたので、これに基づいてブロックを有効/無効にします-これは実現可能な方法であり、誰かが代替手段を提供できますか?

どうもありがとう

4

2 に答える 2

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>

次に、実際の Web ページ (テンプレートを使用するページ) に次のように表示されます。

{% 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 %}

ここでの基本テンプレートは と呼ばれることに注意してくださいbase.html。したがって、Web ページでは、を配置して拡張 します。次に、そのページで、特定の のコンテンツを追加するだけです。base.html{% extends "base.html" %}block

于 2013-01-17T11:30:27.160 に答える