はじめに
DJANGO for BEGINNERSをやってみる その1の続き
Chapter3: Pages App
その1に比べてちょっと高度なことをする。
Templateの継承
まずは親テンプレートとなるbase.htmlを作る。
<header>
<a href="{% url 'home' %}"> Home </a>| <a href="{% url 'about' %}"> About </a>
</header>
{% block content %}
{% endblock content%}
ヘッダに先ほどまでに作ったhome.htmlとabout.htmlのリンクを貼る。
djangoのテンプレートタグは{% %}で囲まれている。{% url 'home'%}はurls.pyに記述したhome.htmlのURLになる。
参考:Django: 組み込みタグとフィルタの一覧
home.htmlとabout.htmlにbase.htmlを継承させる。
{% extends 'base.html' %} <!-- base.htmlを継承する -->
{% block content %} <!-- block tagで親templateのblock tagの中身をオーバーライドできる -->
<h1> About Page </h1>
{% endblock content %}
{% extends 'base.html' %}
{% block content %}
<h1> Pages App !! </h1>
{% endblock content %}
ここまできたら以下のようなページになるはず!
Tests
In the words of Jacob Kaplan-Moss, one of Django's original creators, "Code without tests is broken as designed."
(William S. Vincent, DJANGO for BEGINNERS, Chapter3 Tests)
"テストなしのコードは設計通りに機能しない" ということでその1で作ったページのテストを作成する。
プロジェクト作成時にテスト用のファイルは自動で作成されているので、そこへテスト関数を追記する。
from django.test import TestCase, SimpleTestCase
# Create your tests here.
class SimpleTest(SimpleTestCase):
# HttpRequestに対してリクエスト成功(=200)の応答が返ってきていることを確認するテスト
def test_home_page_status_code(self):
response = self.client.get('/')
self.assertEqual(response.status_code, 200)
def test_about_page_status_code(self):
response = self.client.get('/about/')
self.assertEqual(response.status_code, 200)
テストがかけたら、実行する。
% python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.059s
OK
Destroying test database for alias 'default'...
コマンド一発で自動実行。便利!
Deploy
Heroku使ってデプロイする手順もあるけど、気が向いたらやる。
Chapter3まとめ
- Templateの継承
- クラスベース汎用ビューの利用
- 基本的なテストの追加と実行
続き
Chapter4 Message Borad App