13

いくつかの場所で利用できるようにしたい小さな統計ブロックがあります: ユーザーのプロファイル ページと、ユーザーのリストを含む検索ページです。

このブロックを繰り返すには、どのように進めるのが最善でしょうか? 私は PHP のバックグラウンドを持っており、PHP では単純な引数を渡す単純なインクルードになります。djangoでは、基本的に次のようなものを呼び出せるようにしたい:

 {% stats_block user %}

user は、すべてのユーザー情報を含むオブジェクトです。シンプルなテンプレートタグを考えていたのですが、ブロックがかなり大きくてテンプレートタグで一行にまとめたくないです。

どうもありがとう!

4

2 に答える 2

42

テンプレートタグを含める

引数付きのテンプレートを含めることができます:

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}

テンプレートの継承

しかし、すべてのテンプレートでブロックを繰り返す最善の方法は、ベース テンプレートに base.html を指定することです。

<html>
...
    <div id="user-block">
        {% if request.user.is_authenticated %}
            hello {{ request.user }}
        {% else %}
            <a href="{% url acct_signup %}">Sign up!</a>
        {% endif %}
    </div>
 ...
    <div id="body">
        {% block body %}
        {% endblock %}
    </div>
 ...
 </html>

たとえば、連絡先テンプレートは次のように単純です。

{% extends 'base.html' %}

{% block body %}
    Contact use: foo@example.com
{% endblock %}

詳細については、テンプレートの継承に関するドキュメントを参照してください。

包含タグ

最後に、もう 1 つの優れたオプションは、実際のテンプレートインクルードの前に Python コンテキスト処理をフックすることを可能にする include_tag を作成することです。

于 2012-08-27T13:32:16.033 に答える
1

特定のテンプレートをレンダリングできるカスタム テンプレート タグを作成できます。包含タグを参照してください。

リンクから:テンプレート タグのもう 1 つの一般的なタイプは、別のテンプレートをレンダリングして一部のデータを表示するタイプです。

于 2012-08-27T13:32:41.260 に答える