Djangoの人はほんとに優しい ベーステンプレートの使い方
自分の勉強不足のせいですが、ベーステンプレートの使い方を間違っていました。
Django-jaで恐れ多くも聞いてみました。MiCHiLUさんが教えてくださいました。
ホント暖かいと思た。
に{% block css%}、{% block js %}とか置くのがいいと思います
ということです。今後の自分の為に、同じ悩みを持った人の為に以下まとめ
テンプレートを拡張していく際に、JSとか、CSSを適宜適用する方法
なんと呼ぶのか知らないが、Djangoのテンプレートシステムは、ベースファイルを簡単に拡張していける。
命名定義
- ベースファイル
- コンテンツの詰まってないひな形
- 拡張するファイル
- ベースファイルに具体的な内容を指定するファイル
手順
- ベースのファイルを用意する。
- 毎回絶対書きそうなやつ
- 1)の中にブロックを定義しておく。
- 利用する度に内容が変わる項目をブロック({%hoge%} foo {%endblock%})として定義する。
- jsとか、cssとか、contentとか、メニューやフッターもあるといいかも
- 拡張するファイルを用意する。
- ベースのファイルを指定する(extends)
- 2)で定義したブロックに対応したブロックを記述する。
サンプルファイル
ベースファイル(base.html)
注)いろいろコメント書き込んだのでこのままでは動きません。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{% block title %}Untitled{% endblock %}</title> #<title>タグの中にtitleブロックを定義 {% block js %}{% endblock %} # jsブロックを定義(<script>タグは拡張側で書く) <style type="text/css"> {% block css %}{% endblock %} #cssブロックを定義 </style> </head> <body bgcolor=gray text=white link=pink vlink=pink> <h1>MessageRelaySystem Two a</h1> <a href="/">Home</a> <hr> {% block contents %}hello world.{% endblock %} #contentsブロックを定義 <hr> </body> </html>
拡張1ファイル(main.html)
注)いろいろコメント書き込んだのでこのままでは動きません。
{% extends "base.html" %} #base.htmlを拡張しますよ宣言 {% block title %} # title ブロックの始まり宣言 {{ title }} {% endblock %} # title ブロック ここまで {% block contents %} # contents ブロックの始まり宣言 <h3>{{ title }}</h3> {% endblock %} # contents ブロックここまで {% block js %} #js ブロック始まり宣言 <script language="javascript" src="./js/prototype.js" type="text/javascript"></script> {% endblock %} #jsブロックここまで {% block css %} #cssブロック始まり宣言 .Title{ background:#fff; float:center; width:700px; margin:10px auto 0; padding:6px; border:solid 1px #eee; } {% endblock %} #cssブロックここまで