1つのリクエストで複数のDjangoテンプレートを組み合わせる
-
03-07-2019 - |
質問
誰かが次の問題に対する最善のアプローチを見つけるのを手伝ってくれるかどうか疑問に思っています。 Djangoテンプレートを使用してWeb UIコンポーネントを構築するWebアプリケーションを構築しています。ヘッダー/フッター、HTMLヘッド、マストヘッドなど、多くの一般的なHTML要素があります。これらを一度コーディングして、「include / combine」を作成します。コアアプリケーション機能を表す他のテンプレートを使用します。
これはDjangoテンプレートを使用して可能ですか?もしそうなら、どうすればそれを達成できますか?
解決
djangoの extends
タグを使用できます。ヘッダーとフッターがあるとします。たとえば、foo.djangoというテンプレートを作成できます。
<h1>My HTML Header</h1>
<!-- an so on -->
{% block content %}
{% endblock %}
<!-- html footer -->
その後、別のテンプレート、たとえばbar.djangoを作成できます:
{% extends "foo.django" %}
{% block content %}
This overrides the content block in foo.django.
{% endblock %}
...これはレンダリングします:
<h1>My HTML Header</h1>
<!-- an so on -->
This overrides the content block in foo.django.
<!-- html footer -->
http://www.djangobook.com/en/にdjangoテンプレートに関する適切な指示があります。 1.0 / chapter04 / 。
他のヒント
{%extends%}
および {%include%}
メソッドは、コンテキストに追加情報を必要としないページ要素に適しています。
データベースからコンテキストにさらに多くのものを挿入する必要があるとすぐに、テンプレートタグが便利になります。例として、 contrib。 Djangoに含まれるコメント
アプリは、特定のモデルインスタンスに添付されたコメントを取得するための {%get_comment_list%}
テンプレートタグを定義します。使用方法は次のとおりです。
<div>
{% load comments %}
{% get_comment_list for my_instance as comment_list %}
{% for comment in comment_list %}
<p><a href="{{ comment.url }}">{{ comment.name }}</a> wrote:</p>
{{ comment.comment }}
{% endfor %}
</div>
これを別のテンプレートに保存し、 {%include%}
を他のテンプレートに保存できます。
独自のコンテンツには、独自のカスタムテンプレートタグを記述できます。 ドキュメントに従ってください。可能な限り、シンプルタグメカニズム。便利な既製のテンプレートタグは、 djangosnippets.org および blogosphere 。
{%include%}
タグを試してください。
http://docs.djangoproject.com/en/dev / ref / templates / builtins /#include