Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Django_fukuoka

Django_Fukuoka

  • Login to see the comments

  • Be the first to like this

Django_fukuoka

  1. 1. 熱血!!Django_Fukuoka!! @さくらクラブ Shuya Motouchi @nwiizo
  2. 2. あじぇんだ! 自己紹介 Pythonについて HTTPについて お昼休憩 Djangoについて 反省会
  3. 3. Who I am !!! Shuya Motouchi 21 age Network infrastructure python C++ Haskell
  4. 4. What Python ??
  5. 5. What Python ?? •Pythonはさまざまな分野のアプリケーションで 使われている、極めてパワフルでオープンソー スな動的プログラミング言語です。 •記述が簡単で可読性が高い •データ解析や数値計算にも強い!!!
  6. 6. What Python ?? •Pythonはさまざまな分野のアプリケーションで 使われている、極めてパワフルなオープンソー スな動的プログラミング言語です。 •記述が簡単で可読性が高い •データ解析や数値計算にも強い!!! 福岡では普及率が最悪
  7. 7. What Python ?? 機械学習 数値演算 セキュリティ Webプログラミング
  8. 8. What Python ?? 数値演算 データの 取得 データの 加工 データの 出力
  9. 9. What Python ?? 数値演算 IPython:先進的なShell http://ipython.org/ Numpy: 強力な 数値配列 オブジェクトとそれらを操作する強力 なルーチンを提供 http://www.numpy.org/ Scipy: 高レベルなデータ処理ルーチン, 最適化, 回帰, 補間等 http://www.scipy.org/ Matplotlib: 2次元可視化 http://matplotlib.sourceforge.net/ Mayavi: 3次元可視化 http://code.enthought.com/projects/mayavi/
  10. 10. What Python ?? 数値演算
  11. 11. What Python ?? 機械学習 Pythonには機械学習のためにデータ を処理するライブラリ(数値演算をす るためのライブラリや図を作成するた めのライブラリなど……)がそろって いて、呼び出したり組み合わせて処 理したり……といったことがしやすい ため、 多くの人が機械学習で使っています。
  12. 12. What Python ?? 機械学習
  13. 13. What Python ?? セキュリティ Pythonは情報セキュリティの世界では 他よりも先んじているプログラミング言 語です。Pythonを使ったrawソケットや Scapyライブラリなどネットワーク関連の パッケージやCOMをPythonから扱えて Volatilityフレームワークなどシステム関 連のトピックも扱えます。
  14. 14. What Python ?? セキュリティ
  15. 15. What Python ?? Webプログラミング HTTPBasicServerなどがあり非常に 簡単にWebプログラミングができる。 WebフレームワークにはFlaskや Djangoなどがある。
  16. 16. What Python ?? Webプログラミング
  17. 17. Python introduction
  18. 18. Python introduction •前回の勉強会(課題) https://github.com/nwiizo/IntroducingQuiz
  19. 19. Python introduction インタープリタを起動しましょう $python3 もしくは $ipython3
  20. 20. Python introduction Hello World print(“Hello World”) #は コメントアウト
  21. 21. Python introduction 変数 データ型を明記することがない動的言語
  22. 22. Python introduction 変数 データ型を明記することがない動的言語 C言語 Python int a; a = 1; a = 1
  23. 23. Python introduction 変数 変数名 = 値 で値を代入することができる。 >>var1 = 1 >>var1 = var + 1 >>print(var1) 2
  24. 24. Python introduction エスケープシーケンス(オマケ) ¥改行 : バックスラッシュと改行が無視される ¥¥ : バックスラッシュ(¥) ¥' : シングルクォート(') ¥" : ダブルクォート(") ¥a : ベル(BEL) ¥b : バックスペース(BS) ¥f : フォームフィード(FF)
  25. 25. Python introduction エスケープシーケンス(オマケ) ¥n : 改行(LF) ¥r : 復帰(CR) ¥t : タブ(TAB) ¥v : 垂直タブ(VT) ¥nnn : 8進表記文字(nは0~7) ¥xnn : 16進表記文字(nは0~f) ¥uxxxx : ユニコード文字xxxx (例: u"¥u3042") ¥U....xxxx : ユニコード文字xxxxxxxx (例: U"¥U00003042") ¥N{name} : Unicodeデータベース文字 (例: u"¥N{HIRAGANA LETTER A}")
  26. 26. Python introduction •四則演算 a = 1 + 1 # 2 s = 3 – 1 # 2 m = 3 * 2 # 6 d = 6 / 3 # 2.0
  27. 27. Python introduction •インデント C/C++やPHP では文を { ... } で囲むことでブロック(複文)を 構成しますが、Python ではインデント(行頭の空白文字の 数)が重要な意味を持ち、同じ数の空白でインデントされた 文がブロックとみなされます。
  28. 28. Python introduction •インデント a = 3 if a == 5: print "AAA" # if文の対象 print "BBB" # if文の対象 print "CCC" # if文の対象ではない
  29. 29. Python introduction •エンコードルール • 日本語など、ASCII以外の文字を含むスクリプトを作成す る場合は、スクリプトの1行目、または2行目に、下記の形 式でスクリプトの エンコードルール(coding:) を指定してく ださい。
  30. 30. Python introduction •エンコードルール # -*- coding: utf-8 -*-
  31. 31. Python introduction •リスト 10 20 30 40a 0 321 -4 -1-2-3
  32. 32. Python introduction •リスト 10 20 30 40a a[開始:終了:繰り返し]
  33. 33. Python introduction •リスト a = [10, 20, 30, 40] a[0] # 10 a[1] # 20
  34. 34. Python introduction •リスト a = [10, 20, 30, 40] a[0:2] # [10,20,30] a[0:-1] # [10,20,30] a[0::2] #[10,30]
  35. 35. Python introduction •制御構文 もし~ならば(if,else,elif)
  36. 36. Python introduction •制御構文 if expression: suite... [elif expr: suite...] [else: suite...]
  37. 37. Python introduction •制御構文 if num > 10: print “大きい" elif num == 10: print “等価" else: print “小さい"
  38. 38. Python introduction •制御構文 ~のあいだ(while, else)
  39. 39. Python introduction •制御構文 while expression: suite... [else: suite...]
  40. 40. Python introduction •制御構文 n = 0 while n < 10: print n n += 1 else: print 'END'
  41. 41. Python introduction •制御構文 ~のあいだ(for, in)
  42. 42. Python introduction •制御構文 for var in expression: suite... [else: suite...]
  43. 43. Python introduction •制御構文 for n in [1, 2, 3]: print n #=> 1, 2, 3
  44. 44. Python introduction •制御構文 for n in range(10): print n
  45. 45. Python introduction •制御構文(課題) FizzBuzz:3の倍数でFizz5の倍数で Buzzsそれ以外の時は数字 を出力してください
  46. 46. $休憩
  47. 47. Python introduction •制御構文(オマケ) ループを抜ける(break)
  48. 48. Python introduction •制御構文(オマケ) for n in range(10): if n == 5: break print n # 0, 1, 2, 3, 4
  49. 49. Python introduction •制御構文(オマケ) ループを繰り返す(continue)
  50. 50. Python introduction •制御構文(オマケ) for n in range(10): if n == 5: continue print n
  51. 51. Python introduction •制御構文(オマケ) 例外処理(try, except, else, finally, raise)
  52. 52. Python introduction •制御構文(オマケ) try: suite... [except [expression]: suite...] [else: suite...] [finally: suite...]
  53. 53. Python introduction str = 'ABC' try: c = str[5] except IOError: print 'IOError‘ except IndexError: print 'IndexError' except: print 'Unknown' else: print 'Other' finally: print 'Finally'
  54. 54. Python introduction •制御構文(オマケ) with構文(with)
  55. 55. Python introduction •制御構文(オマケ) with expression [as target] [, expression [as target]]... : suite...
  56. 56. Python introduction •制御構文(オマケ) f = open("test.txt") print f.read() f.close() with open("test.txt") as f: print f.read()
  57. 57. Python introduction •制御構文(オマケ) アサーション文(assert)
  58. 58. Python introduction •制御構文(オマケ) assert はテストの際に値が期待通りに設定されてい るかを確認するための仕組みです。__debug__ が True の時のみ動作し、式を評価して偽であれば、 AssertionError例外を発生させます。python を -O オ プション付きで起動することで、__debug__ の値は False になります。
  59. 59. Python introduction •制御構文(オマケ) パス文(pass)
  60. 60. Python introduction •制御構文(オマケ) pass は何もしない文です。中身の無い関 数やクラスを作成する際に使用されます。
  61. 61. $休憩
  62. 62. Python introduction •関数 def 文を用いて関数(function)を定義す ることができます。
  63. 63. Python introduction •関数 def add(x, y): print x + y add(3,10) #=>13
  64. 64. Python introduction •関数(課題) ズンドコキヨシ関数を作って!!!
  65. 65. お昼休憩…。 • 質問もしてください!!! • ごはん行く人は一緒に行きましょう!!!
  66. 66. What is Hypertext Transfer Protocol WebブラウザとWebサーバの間でHTMLなど のコンテンツの送受信に用いられる通信プ ロトコルである。ハイパーテキスト転送プロト コルとも呼ばれる。
  67. 67. What is Hypertext Transfer Protocol WebブラウザとWebサーバの間でHTMLなど のコンテンツの送受信に用いられる通信プ ロトコルである。ハイパーテキスト転送プロト コルとも呼ばれる。 HTTPです。
  68. 68. 最初のバージョン • The response from the server was always an HTML page.
  69. 69. What is Hypertext Transfer Protocol 現在のHTTPリクエスト
  70. 70. HTTP/1.1 • WiresharkでHTTP1.1の中身を見るとこんな感じ
  71. 71. What is Hypertext Transfer Protocol Webアプリケーション 1.Webブラウザを通してユーザが サーバーにリクエストを送る 2.Webアプリケーションは受け取った リクエストに対応した結果を返す。 3.Webアプリケーションで処理した 結果をWebブラウザに返す
  72. 72. What is Web Application Framework • 動的な ウェブサイト、Webアプリケーション、Webサービスの開 発をサポートするために設計されたアプリケーションフレーム ワークである。 • フレームワークの目的は、Web開発で用いられる共通した作業 に伴う労力を軽減することである。 • たとえば、多数のフレームワークがデータベースへのアクセス のためのライブラリや、テンプレートエンジン、セッション管理を 提供し、コードの再利用を促進させるものもある。 その他のフレームワーク:Flask,Pyramid,Bottle,Tornado Ruby on Rails
  73. 73. Django introduction
  74. 74. What is Django •Django は Python で書かれたオープンソース のWebフレームワーク。Webアプリケーション開 発に共通するメカニズムを提供し、DRY (Don't Repeat Yourself) の法則に沿った開発を、より 簡単に、より迅速に実現します。
  75. 75. リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定 ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
  76. 76. リクエスト処理に関すること 1. クライアント(C)からのHTTPリクエストはDjangoの リクエストとして扱われます。 2. リクエストされたURLに対応するビューを、URL ディスパッチャによって検索して呼び出します。 3. 呼び出されたビューにおいて、必要ならばモデル やテンプレートを用いてレスポンスオブジェクト を生成します。 4. レスポンスオブジェクトはHTTPレスポンスとして クライアントに送り返されます。
  77. 77. $休憩
  78. 78. アプリの解説をしていきます。
  79. 79. アプリ生成の流れ!!! 1. プロジェクトの作成 2. アプリケーションの作成 3. adminユーザーの作成 4. モデルの作成 5. URLディスパッチャの作成 6. Viewの作成 7. テンプレートの作成 8. 課題
  80. 80. https://github.com/nwiizo/Django_Fukuoka 参照すると今から作るアプリに関する情報が 載っていますのでそちらを参照してください
  81. 81. プロジェクト • Djangoインスタンスの全設定を持ったPythonパッケージです。 • 1つのWebページを1つのプロジェクトとして作る場合がほとんどです。 • プロジェクト内には、プロジェクト固有のアプリケーションを新規に作 成して配置したり、Webサイトごとの設定(データベース設定、Django のオプション設定、アプリケーション毎の設定など)を持ちます。 $django-admin startproject 【プロジェクト名】 • このコマンドでプロジェクトディレクトリと初期設定ファイルが生成されます。
  82. 82. プロジェクトの作成 環境構築 $python3 -m venv myvenv $source myvenv/bin/activate $pip install django==1.8
  83. 83. プロジェクトの作成 環境構築(トラブルシューティング) $sudo apt-get install python-virtualenv $virtualenv --python=python3.4 myvenv
  84. 84. プロジェクトの作成 プロジェクトの作成 $ django-admin startproject mysite .
  85. 85. プロジェクトの作成 プロジェクトの作成 ├───manage.py └───mysite settings.py urls.py wsgi.py __init__.py
  86. 86. TIME_ZONE = 'Asia/Tokyo' USE_TZ = False プロジェクトの作成 mysite/settings.py タイムゾーンの設定
  87. 87. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } プロジェクトの作成 mysite/settings.py データベースの設定
  88. 88. $ python3 manage.py migrate プロジェクトの作成 データベースの作成
  89. 89. $python manage.py runserver プロジェクトの作成 サーバーを動かそう!!
  90. 90. http://127.0.0.1:8000/ にアクセス プロジェクトの作成 確認
  91. 91. プロパティとアクションの塊 プロジェクトの作成 オブジェクト is なに??
  92. 92. 状態(プロパティ)と命令(アクション)の塊 プロジェクトの作成 オブジェクト is なに??
  93. 93. プロジェクトの作成 猿をモデルにしたいときには
  94. 94. 猿【monkey】オブジェクトを作ります。 プロジェクトの作成 猿をモデルにしたいときには
  95. 95. monkey ============ 年齢 age 性別 sex 種族 type 機嫌 mood どこのグループに所属か w_group プロジェクトの作成 猿をモデルにしたいときには(プロパティ)
  96. 96. monkey ============ 木に登る Climb_a_tree() 引っ掻く scratch() 喧嘩をする fight() 食べる feed(food) プロジェクトの作成 猿をモデルにしたいときには(アクション)
  97. 97. プロジェクトの作成 作りたいものは猿か??
  98. 98. モデルの作成 ブログのページとしてほしいもの
  99. 99. タイトル 本文 誰が書いたか 作った日時 公開情報 モデルの作成 ブログのページとしてほしいもの
  100. 100. Post ----------------------------------- title text author created_date published_date モデルの作成 ブログのページとしてほしいもの
  101. 101. アプリケーション • 単機能のWebアプリケーションを表すPythonパッケージになります。 • 中身としてはただのパッケージなのでPATHさえ通っていればどこに ファイルを配置してもよいです。 • プロジェクトやほかのアプリケーションとの依存をなるべく減らして、 機能を分離させておけば、別のプロジェクトに再利用できます。 $python3 manage.py startapp 【アプリケーション名】 • このコマンドでアプリを生成することができます。
  102. 102. $python manage.py startapp blog アプリケーションの作成 アプリケーションの開始
  103. 103. blog migrations __init__.py __init__.py admin.py models.py tests.py views.py アプリケーションの作成 ディレクトリの確認
  104. 104. INSTALLED_APPS = ( ~~~~~~~~~~~~~~~~~~~~~ ‘blog’, #ブログ項目の追加 ) モデルの作成 プロジェクト側への通知(mysite/settings.py)
  105. 105. https://github.com/nwiizo/Django_Fukuoka/blob/master /django_stady/mysite/mysite/blog/models.py ここを参照してください モデルの作成 ブログモデルの作成(blog/models.py)
  106. 106. モデル • DjangoはO/Rマッパー(Object-Relation mapper)を提供しているため、 Pythonコードでデータベースレイアウトを記述できます。 • 各モデルはdjango.db.modelsModelクラスを継承したクラスでデータ ベースの1テーブルに対応します。データベースのフィールドやリ レーション、振る舞いをモデルクラスの属性やメゾットとして定義する ことでデータベースへのアクセスAPIを使えます。
  107. 107. リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定 ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
  108. 108. fromとかimportで始まる行は他のファイルから再利用をす るために追加する行です。 モデルの作成 ブログモデルの作成(blog/models.py)
  109. 109. class Post(models.Model):モデルを定義します。 • classはオブジェクトを定義します。 • Postはモデルの名前です。 • models.ModelはポストがDjango Modelだという意味で、 Djangoが、これはデータベースに保存すべきものだと分 かるようにしています。 モデルの作成
  110. 110. プロパティ(状態)の定義 title text、created_date published_date author • models.CharField - テキスト数を定義するフィールド • models.TextField - 制限無しの長いテキスト用 • models.DateTimeField - 日付と時間のフィールド • models.ForeignKey - これは他のモデルへのリンク モデルの作成
  111. 111. アクションの定義 def publish(self): self.published_date = timezone.now() self.save() これは、ブログを公開するメソッドです。 モデルの作成
  112. 112. $python3 manage.py makemigrations blog モデルの作成 作成は完了したのでモデル用のテーブルを作成します。
  113. 113. from django.contrib import admin from .models import Post admin.site.register(Post) モデルの作成 ログインページの作成!!! blog/admin.py
  114. 114. Postモデルをimportしています。モデルをadminページで見 れるようにするには、モデルをadmin.site.register(Post)で登 録する必要があります。 モデルの作成 ログインページの作成!!! blog/admin.py
  115. 115. $python3 manage.py createsuperuser モデルの作成 ユーザーの作成!!!
  116. 116. $休憩
  117. 117. URLディスパッチャ • URLディスパッチャ機構はフレームワークに依存した制約、拡張士の 制限がなくなり黒魔術を使わずにURL設計を保てるような仕組みを 提供します。 • URLは、正規表現で書かれたURLのパターンとPythonの関数のマッ ピングを定義したURLconfモジュールに記述します。 • URLconfはアプリケーションごとに分割できるため、アプリケーション の再利用性を高めることができます。 • URLに名前を付けて定義することでコードやテンプレートからはその 名前でURLを参照できるようになり、URL設計をコードから分離でき ます。
  118. 118. リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定 ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
  119. 119. URLに関すること DjangoではURL_conf(URL設定)と呼ばれるものを使います。
  120. 120. URLに関すること ・書き方 from django.conf.urls import include, url urlpatterns = [ url(r‘URL名/’, include(呼び出したいモジュール)), ] mysite/urls.py ファイル
  121. 121. URLに関すること from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'', include('blog.urls')), ] mysite/urls.py ファイル
  122. 122. URLに関すること from django.conf.urls import include, url from . import views urlpatterns = [ url(r'^$', views.post_list), ] blog/urls.py ファイル
  123. 123. URLに関すること 127.0.0.1:8000にアクセス・・・。 blog/urls.py ファイル
  124. 124. URLに関すること views.post_listがないのでアクセスできないよぉ・・・。 blog/urls.py ファイル
  125. 125. ビュー • ビューは要求されたページのHttpResponseオブジェクトなどのHTTP レスポンスを返す関数です。 • リクエストパラメータからデータを取得し、テンプレートを読み込み、 取得データを使ってテンプレートをレンダリングして返す。ような処 理が一般的です。
  126. 126. リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定 ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
  127. 127. viewsに関すること from django.shortcuts import render # Create your views here. def post_list(request): return render(request, 'blog/post_list.html', {}) blog/views.py ファイル
  128. 128. HTMLに関すること HTML は "HyperText Markup Language"の略で す。 HyperTextとは、テキストなどをクリックすると 別のページに繋がるハイパーリンクが使えるとい うことです。Markupは、目印をつけるという意味で す。文章の各部分がどのような役割を果たしてい るかブラウザに伝えます。<と >に囲まれたタグに よってマークアップされたものは、要素と呼ばれま す。
  129. 129. HTMLに関すること テンプレートは blog/templates/blog ディレクトリに保存しま す。 post_list.html ファイルの作成。
  130. 130. クエリセットに関すること ポスト内容を保存する為の Post モデルは、 models.py に定義しました。ポストの一覧を表示す る post_list は views.py にあり、そこにテンプレー トも加わりました。
  131. 131. クエリセットに関すること ビュー が モデルとテンプレートの橋渡しをしてく れます。私達が作業している post_list ビュー の 場合、表示したいデータを取り出して、テンプ レートファイルに渡すことになります。基本的に、 どのモデルのデータを、どのテンプレートに表示 させるかは、 ビューに 記述します。
  132. 132. クエリセットに関すること from django.shortcuts import render from .models import Post blog/views.py ファイル
  133. 133. クエリセットに関すること from django.shortcuts import render from django.utils import timezone from .models import Post def post_list(request): posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') return render(request, 'blog/post_list.html', {'posts': posts}) blog/views.py ファイル
  134. 134. $休憩
  135. 135. テンプレートシステム • Djangoのテンプレートシステムは表示を担うものであってロジックを 記述する場所ではありません。 • デザインとコンテンツ、コードを分離する、パワフルで拡張性が非常 に高いです。 • XMLベースではなくテキストベースのテンプレートであるため、XML やHTMLに限らず、EメールやJavasScript、CSVなど、どんなテキスト フォーマットにもテンプレートを使えます。 • テンプレート継承を使えばいい感じのUIをいい感じに使えます。
  136. 136. リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定 ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
  137. 137. テンプレートに関すること <div> <h1><a href="/">Django Fukuoka Blog</a></h1> </div> {% for post in posts %} <div> <p>published: {{ post.published_date }}</p> <h1><a href="">{{ post.title }}</a></h1> <p>{{ post.text|linebreaks }}</p> </div> {% endfor %} blog/templates/blog/post_list.html ファイル
  138. 138. cssに関すること Cascading Style Sheets (CSS)とは、HTMLな どのマークアップ言語で書かれたWebサイ トの見た目や書式を記述するための言語 です。
  139. 139. cssに関すること CSS https://github.com/nwiizo/Django_Fukuoka/blob/master/dj ango_stady/mysite/mysite/static/css/blog.css HTML https://github.com/nwiizo/Django_Fukuoka/blob/master/dj ango_stady/mysite/mysite/blog/templates/blog/base.html
  140. 140. cssに関すること mysite/settings.pyファイルに STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), ) を記載する。 manage.pyのディレクトリにstaticファイルを作る。
  141. 141. cssに関すること static css blog.css CSSの下にblog.cssを作成します。
  142. 142. cssに関すること h1 a { color:#FCA205; } h1 a はCSSセレクタです。h1 要素の中にあるa 要素 (例:このようなコードのこと <h1><a href="">link</a></h1>)にスタイルを適用しますという意味になります。この場合、テキス トの色を#FCA205、オレンジ色にする、という意味です。もちろん、あなたの好きな色に変 更してもいいです.
  143. 143. cssに関すること <link rel="stylesheet" href="{% static 'css/blog.css' %}"> これを記述するといいのですがすべてを記述していくのは非常に 面倒ですのでオープンソースのテンプレートを記述していきます。
  144. 144. cssに関すること <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap- theme.min.css"> <link rel="stylesheet" href="{% static 'css/blog.css' %}"> これを記述するといいのですがすべてを記述していくのは非常に 面倒ですのでオープンソースのテンプレートを記述していきます。
  145. 145. $休憩
  146. 146. テンプレートの拡張 ウェブサイトを作る時、どのページでも同じHTMLタグを使うことがありますよ ね。たとえば、ヘッダーやフッター部分は、どのページでも同じものを使いま す。そういう時に、全てのHTMLファイルに対して、同じ作業を繰り返さなくて すみます。一箇所だけ変更すれば、その変更は全てのページに適用されま す。 では、やっていきます。 https://github.com/nwiizo/Django_Fukuoka/blob/master/django_stady/mysi te/mysite/blog/templates/blog/base.html を見ていきましょう!!!
  147. 147. テンプレートの拡張 base.html に block を記述しました。そうすると、別のテンプレートの内 容を、この block の部分に挿入することが出来るようになります。これ が、テンプレートの拡張です。 {% block content %} {% endblock %}
  148. 148. テンプレートの拡張 post_list.htmlで記載しています。 {% block content %} {% for post in posts %} <div class="post"> <div class="date"> {{ post.published_date }} </div> <h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1> <p>{{ post.text|linebreaks }}</p> </div> {% endfor %} {% endblock content %}
  149. 149. テンプレートの拡張 extendsで読み込みをしています。 {% extends 'blog/base.html' %}
  150. 150. テンプレートの拡張 extendsで読み込みをしています。 {% extends 'blog/base.html' %}
  151. 151. 課題() ブログ記事の追加と編集をウェブサイト 上で出来るようにしましょう
  152. 152. 最後に。 • PythonとRubyの表現力はあまり変わらないので Railsでも同じ開発コストで同じようなものができる。 • 1.10になってバグでハマることもなくなった。 • 就職で東京に行くので時期的にも福岡で最後の勉 強会なのでみんなにもっと頑張って盛り上げてほし い

×