Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Djago_Fukuoka_2016
Search
nwiizo
March 28, 2016
0
48
Djago_Fukuoka_2016
nwiizo
March 28, 2016
Tweet
Share
More Decks by nwiizo
See All by nwiizo
SREの前に
nwiizo
12
3k
2024年版 運用者たちのLLM
nwiizo
3
860
Platform Engineering と SRE の門
nwiizo
16
5.5k
運用者の各領域で向き合うLLM
nwiizo
1
470
可観測性ガイダンス
nwiizo
14
3.6k
書を捨てよ、現場へ出よう
nwiizo
12
11k
走馬灯のIaCは考えておいて
nwiizo
10
5.9k
SREとPlatform Engineerの交差点
nwiizo
9
6.7k
SREからPlatform Engineerへの拡大
nwiizo
15
3.8k
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Being A Developer After 40
akosma
86
590k
Fireside Chat
paigeccino
34
3k
Bash Introduction
62gerente
608
210k
What's in a price? How to price your products and services
michaelherold
243
12k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Done Done
chrislema
181
16k
Music & Morning Musume
bryan
46
6.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Ruby is Unlike a Banana
tanoku
97
11k
Transcript
熱血!!Django_Fukuoka!! @さくらクラブ Shuya Motouchi @nwiizo
あじぇんだ! 自己紹介 Pythonについて HTTPについて お昼休憩 Djangoについて 反省会
Who I am !!! Shuya Motouchi 21 age Network infrastructure
python C++ Haskell
What Python ??
What Python ?? •Pythonはさまざまな分野のアプリケーションで 使われている、極めてパワフルでオープンソー スな動的プログラミング言語です。 •記述が簡単で可読性が高い •データ解析や数値計算にも強い!!!
What Python ?? •Pythonはさまざまな分野のアプリケーションで 使われている、極めてパワフルなオープンソー スな動的プログラミング言語です。 •記述が簡単で可読性が高い •データ解析や数値計算にも強い!!! 福岡では普及率が最悪
What Python ?? 機械学習 数値演算 セキュリティ Webプログラミング
What Python ?? 数値演算 データの 取得 データの 加工 データの 出力
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/
What Python ?? 数値演算
What Python ?? 機械学習 Pythonには機械学習のためにデータ を処理するライブラリ(数値演算をす るためのライブラリや図を作成するた めのライブラリなど……)がそろって いて、呼び出したり組み合わせて処 理したり……といったことがしやすい
ため、 多くの人が機械学習で使っています。
What Python ?? 機械学習
What Python ?? セキュリティ Pythonは情報セキュリティの世界では 他よりも先んじているプログラミング言 語です。Pythonを使ったrawソケットや Scapyライブラリなどネットワーク関連の パッケージやCOMをPythonから扱えて Volatilityフレームワークなどシステム関
連のトピックも扱えます。
What Python ?? セキュリティ
What Python ?? Webプログラミング HTTPBasicServerなどがあり非常に 簡単にWebプログラミングができる。 WebフレームワークにはFlaskや Djangoなどがある。
What Python ?? Webプログラミング
Python introduction
Python introduction •前回の勉強会(課題) https://github.com/nwiizo/IntroducingQuiz
Python introduction インタープリタを起動しましょう $python3 もしくは $ipython3
Python introduction Hello World print(“Hello World”) #は コメントアウト
Python introduction 変数 データ型を明記することがない動的言語
Python introduction 変数 データ型を明記することがない動的言語 C言語 Python int a; a =
1; a = 1
Python introduction 変数 変数名 = 値 で値を代入することができる。 >>var1 = 1
>>var1 = var + 1 >>print(var1) 2
Python introduction エスケープシーケンス(オマケ) ¥改行 : バックスラッシュと改行が無視される ¥¥ : バックスラッシュ(¥) ¥'
: シングルクォート(') ¥" : ダブルクォート(") ¥a : ベル(BEL) ¥b : バックスペース(BS) ¥f : フォームフィード(FF)
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}")
Python introduction •四則演算 a = 1 + 1 # 2
s = 3 – 1 # 2 m = 3 * 2 # 6 d = 6 / 3 # 2.0
Python introduction •インデント C/C++やPHP では文を { ... } で囲むことでブロック(複文)を 構成しますが、Python
ではインデント(行頭の空白文字の 数)が重要な意味を持ち、同じ数の空白でインデントされた 文がブロックとみなされます。
Python introduction •インデント a = 3 if a == 5:
print "AAA" # if文の対象 print "BBB" # if文の対象 print "CCC" # if文の対象ではない
Python introduction •エンコードルール • 日本語など、ASCII以外の文字を含むスクリプトを作成す る場合は、スクリプトの1行目、または2行目に、下記の形 式でスクリプトの エンコードルール(coding:) を指定してく ださい。
Python introduction •エンコードルール # -*- coding: utf-8 -*-
Python introduction •リスト 10 20 30 40 a 0 3
2 1 -4 -1 -2 -3
Python introduction •リスト 10 20 30 40 a a[開始:終了:繰り返し]
Python introduction •リスト a = [10, 20, 30, 40] a[0]
# 10 a[1] # 20
Python introduction •リスト a = [10, 20, 30, 40] a[0:2]
# [10,20,30] a[0:-1] # [10,20,30] a[0::2] #[10,30]
Python introduction •制御構文 もし~ならば(if,else,elif)
Python introduction •制御構文 if expression: suite... [elif expr: suite...] [else:
suite...]
Python introduction •制御構文 if num > 10: print “大きい" elif
num == 10: print “等価" else: print “小さい"
Python introduction •制御構文 ~のあいだ(while, else)
Python introduction •制御構文 while expression: suite... [else: suite...]
Python introduction •制御構文 n = 0 while n < 10:
print n n += 1 else: print 'END'
Python introduction •制御構文 ~のあいだ(for, in)
Python introduction •制御構文 for var in expression: suite... [else: suite...]
Python introduction •制御構文 for n in [1, 2, 3]: print
n #=> 1, 2, 3
Python introduction •制御構文 for n in range(10): print n
Python introduction •制御構文(課題) FizzBuzz:3の倍数でFizz5の倍数で Buzzsそれ以外の時は数字 を出力してください
$休憩
Python introduction •制御構文(オマケ) ループを抜ける(break)
Python introduction •制御構文(オマケ) for n in range(10): if n ==
5: break print n # 0, 1, 2, 3, 4
Python introduction •制御構文(オマケ) ループを繰り返す(continue)
Python introduction •制御構文(オマケ) for n in range(10): if n ==
5: continue print n
Python introduction •制御構文(オマケ) 例外処理(try, except, else, finally, raise)
Python introduction •制御構文(オマケ) try: suite... [except [expression]: suite...] [else: suite...]
[finally: suite...]
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'
Python introduction •制御構文(オマケ) with構文(with)
Python introduction •制御構文(オマケ) with expression [as target] [, expression [as
target]]... : suite...
Python introduction •制御構文(オマケ) f = open("test.txt") print f.read() f.close() with
open("test.txt") as f: print f.read()
Python introduction •制御構文(オマケ) アサーション文(assert)
Python introduction •制御構文(オマケ) assert はテストの際に値が期待通りに設定されてい るかを確認するための仕組みです。__debug__ が True の時のみ動作し、式を評価して偽であれば、 AssertionError例外を発生させます。python
を -O オ プション付きで起動することで、__debug__ の値は False になります。
Python introduction •制御構文(オマケ) パス文(pass)
Python introduction •制御構文(オマケ) pass は何もしない文です。中身の無い関 数やクラスを作成する際に使用されます。
$休憩
Python introduction •関数 def 文を用いて関数(function)を定義す ることができます。
Python introduction •関数 def add(x, y): print x + y
add(3,10) #=>13
Python introduction •関数(課題) ズンドコキヨシ関数を作って!!!
お昼休憩…。 • 質問もしてください!!! • ごはん行く人は一緒に行きましょう!!!
What is Hypertext Transfer Protocol WebブラウザとWebサーバの間でHTMLなど のコンテンツの送受信に用いられる通信プ ロトコルである。ハイパーテキスト転送プロト コルとも呼ばれる。
What is Hypertext Transfer Protocol WebブラウザとWebサーバの間でHTMLなど のコンテンツの送受信に用いられる通信プ ロトコルである。ハイパーテキスト転送プロト コルとも呼ばれる。 HTTPです。
最初のバージョン • The response from the server was always an
HTML page.
What is Hypertext Transfer Protocol 現在のHTTPリクエスト
HTTP/1.1 • WiresharkでHTTP1.1の中身を見るとこんな感じ
What is Hypertext Transfer Protocol Webアプリケーション 1.Webブラウザを通してユーザが サーバーにリクエストを送る 2.Webアプリケーションは受け取った リクエストに対応した結果を返す。
3.Webアプリケーションで処理した 結果をWebブラウザに返す
What is Web Application Framework • 動的な ウェブサイト、Webアプリケーション、Webサービスの開 発をサポートするために設計されたアプリケーションフレーム ワークである。
• フレームワークの目的は、Web開発で用いられる共通した作業 に伴う労力を軽減することである。 • たとえば、多数のフレームワークがデータベースへのアクセス のためのライブラリや、テンプレートエンジン、セッション管理を 提供し、コードの再利用を促進させるものもある。 その他のフレームワーク:Flask,Pyramid,Bottle,Tornado Ruby on Rails
Django introduction
What is Django •Django は Python で書かれたオープンソース のWebフレームワーク。Webアプリケーション開 発に共通するメカニズムを提供し、DRY (Don't
Repeat Yourself) の法則に沿った開発を、より 簡単に、より迅速に実現します。
リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定
ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
リクエスト処理に関すること 1. クライアント(C)からのHTTPリクエストはDjangoの リクエストとして扱われます。 2. リクエストされたURLに対応するビューを、URL ディスパッチャによって検索して呼び出します。 3. 呼び出されたビューにおいて、必要ならばモデル やテンプレートを用いてレスポンスオブジェクト
を生成します。 4. レスポンスオブジェクトはHTTPレスポンスとして クライアントに送り返されます。
$休憩
アプリの解説をしていきます。
アプリ生成の流れ!!! 1. プロジェクトの作成 2. アプリケーションの作成 3. adminユーザーの作成 4. モデルの作成 5.
URLディスパッチャの作成 6. Viewの作成 7. テンプレートの作成 8. 課題
https://github.com/nwiizo/Django_Fukuoka 参照すると今から作るアプリに関する情報が 載っていますのでそちらを参照してください
プロジェクト • Djangoインスタンスの全設定を持ったPythonパッケージです。 • 1つのWebページを1つのプロジェクトとして作る場合がほとんどです。 • プロジェクト内には、プロジェクト固有のアプリケーションを新規に作 成して配置したり、Webサイトごとの設定(データベース設定、Django のオプション設定、アプリケーション毎の設定など)を持ちます。 $django-admin
startproject 【プロジェクト名】 • このコマンドでプロジェクトディレクトリと初期設定ファイルが生成されます。
プロジェクトの作成 環境構築 $python3 -m venv myvenv $source myvenv/bin/activate $pip install
django==1.8
プロジェクトの作成 環境構築(トラブルシューティング) $sudo apt-get install python-virtualenv $virtualenv --python=python3.4 myvenv
プロジェクトの作成 プロジェクトの作成 $ django-admin startproject mysite .
プロジェクトの作成 プロジェクトの作成 ├───manage.py └───mysite settings.py urls.py wsgi.py __init__.py
TIME_ZONE = 'Asia/Tokyo' USE_TZ = False プロジェクトの作成 mysite/settings.py タイムゾーンの設定
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
} } プロジェクトの作成 mysite/settings.py データベースの設定
$ python3 manage.py migrate プロジェクトの作成 データベースの作成
$python manage.py runserver プロジェクトの作成 サーバーを動かそう!!
http://127.0.0.1:8000/ にアクセス プロジェクトの作成 確認
プロパティとアクションの塊 プロジェクトの作成 オブジェクト is なに??
状態(プロパティ)と命令(アクション)の塊 プロジェクトの作成 オブジェクト is なに??
プロジェクトの作成 猿をモデルにしたいときには
猿【monkey】オブジェクトを作ります。 プロジェクトの作成 猿をモデルにしたいときには
monkey ============ 年齢 age 性別 sex 種族 type 機嫌 mood
どこのグループに所属か w_group プロジェクトの作成 猿をモデルにしたいときには(プロパティ)
monkey ============ 木に登る Climb_a_tree() 引っ掻く scratch() 喧嘩をする fight() 食べる feed(food)
プロジェクトの作成 猿をモデルにしたいときには(アクション)
プロジェクトの作成 作りたいものは猿か??
モデルの作成 ブログのページとしてほしいもの
タイトル 本文 誰が書いたか 作った日時 公開情報 モデルの作成 ブログのページとしてほしいもの
Post ----------------------------------- title text author created_date published_date モデルの作成 ブログのページとしてほしいもの
アプリケーション • 単機能のWebアプリケーションを表すPythonパッケージになります。 • 中身としてはただのパッケージなのでPATHさえ通っていればどこに ファイルを配置してもよいです。 • プロジェクトやほかのアプリケーションとの依存をなるべく減らして、 機能を分離させておけば、別のプロジェクトに再利用できます。 $python3
manage.py startapp 【アプリケーション名】 • このコマンドでアプリを生成することができます。
$python manage.py startapp blog アプリケーションの作成 アプリケーションの開始
blog migrations __init__.py __init__.py admin.py models.py tests.py views.py アプリケーションの作成 ディレクトリの確認
INSTALLED_APPS = ( ~~~~~~~~~~~~~~~~~~~~~ ‘blog’, #ブログ項目の追加 ) モデルの作成 プロジェクト側への通知(mysite/settings.py)
https://github.com/nwiizo/Django_Fukuoka/blob/master /django_stady/mysite/mysite/blog/models.py ここを参照してください モデルの作成 ブログモデルの作成(blog/models.py)
モデル • DjangoはO/Rマッパー(Object-Relation mapper)を提供しているため、 Pythonコードでデータベースレイアウトを記述できます。 • 各モデルはdjango.db.modelsModelクラスを継承したクラスでデータ ベースの1テーブルに対応します。データベースのフィールドやリ レーション、振る舞いをモデルクラスの属性やメゾットとして定義する ことでデータベースへのアクセスAPIを使えます。
リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定
ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
fromとかimportで始まる行は他のファイルから再利用をす るために追加する行です。 モデルの作成 ブログモデルの作成(blog/models.py)
class Post(models.Model):モデルを定義します。 • classはオブジェクトを定義します。 • Postはモデルの名前です。 • models.ModelはポストがDjango Modelだという意味で、 Djangoが、これはデータベースに保存すべきものだと分
かるようにしています。 モデルの作成
プロパティ(状態)の定義 title text、created_date published_date author • models.CharField - テキスト数を定義するフィールド •
models.TextField - 制限無しの長いテキスト用 • models.DateTimeField - 日付と時間のフィールド • models.ForeignKey - これは他のモデルへのリンク モデルの作成
アクションの定義 def publish(self): self.published_date = timezone.now() self.save() これは、ブログを公開するメソッドです。 モデルの作成
$python3 manage.py makemigrations blog モデルの作成 作成は完了したのでモデル用のテーブルを作成します。
from django.contrib import admin from .models import Post admin.site.register(Post) モデルの作成
ログインページの作成!!! blog/admin.py
Postモデルをimportしています。モデルをadminページで見 れるようにするには、モデルをadmin.site.register(Post)で登 録する必要があります。 モデルの作成 ログインページの作成!!! blog/admin.py
$python3 manage.py createsuperuser モデルの作成 ユーザーの作成!!!
$休憩
URLディスパッチャ • URLディスパッチャ機構はフレームワークに依存した制約、拡張士の 制限がなくなり黒魔術を使わずにURL設計を保てるような仕組みを 提供します。 • URLは、正規表現で書かれたURLのパターンとPythonの関数のマッ ピングを定義したURLconfモジュールに記述します。 • URLconfはアプリケーションごとに分割できるため、アプリケーション
の再利用性を高めることができます。 • URLに名前を付けて定義することでコードやテンプレートからはその 名前でURLを参照できるようになり、URL設計をコードから分離でき ます。
リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定
ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
URLに関すること DjangoではURL_conf(URL設定)と呼ばれるものを使います。
URLに関すること ・書き方 from django.conf.urls import include, url urlpatterns = [
url(r‘URL名/’, include(呼び出したいモジュール)), ] mysite/urls.py ファイル
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 ファイル
URLに関すること from django.conf.urls import include, url from . import views
urlpatterns = [ url(r'^$', views.post_list), ] blog/urls.py ファイル
URLに関すること 127.0.0.1:8000にアクセス・・・。 blog/urls.py ファイル
URLに関すること views.post_listがないのでアクセスできないよぉ・・・。 blog/urls.py ファイル
ビュー • ビューは要求されたページのHttpResponseオブジェクトなどのHTTP レスポンスを返す関数です。 • リクエストパラメータからデータを取得し、テンプレートを読み込み、 取得データを使ってテンプレートをレンダリングして返す。ような処 理が一般的です。
リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定
ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
viewsに関すること from django.shortcuts import render # Create your views here.
def post_list(request): return render(request, 'blog/post_list.html', {}) blog/views.py ファイル
HTMLに関すること HTML は "HyperText Markup Language"の略で す。 HyperTextとは、テキストなどをクリックすると 別のページに繋がるハイパーリンクが使えるとい うことです。Markupは、目印をつけるという意味で
す。文章の各部分がどのような役割を果たしてい るかブラウザに伝えます。<と >に囲まれたタグに よってマークアップされたものは、要素と呼ばれま す。
HTMLに関すること テンプレートは blog/templates/blog ディレクトリに保存しま す。 post_list.html ファイルの作成。
クエリセットに関すること ポスト内容を保存する為の Post モデルは、 models.py に定義しました。ポストの一覧を表示す る post_list は views.py
にあり、そこにテンプレー トも加わりました。
クエリセットに関すること ビュー が モデルとテンプレートの橋渡しをしてく れます。私達が作業している post_list ビュー の 場合、表示したいデータを取り出して、テンプ レートファイルに渡すことになります。基本的に、
どのモデルのデータを、どのテンプレートに表示 させるかは、 ビューに 記述します。
クエリセットに関すること from django.shortcuts import render from .models import Post blog/views.py
ファイル
クエリセットに関すること 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 ファイル
$休憩
テンプレートシステム • Djangoのテンプレートシステムは表示を担うものであってロジックを 記述する場所ではありません。 • デザインとコンテンツ、コードを分離する、パワフルで拡張性が非常 に高いです。 • XMLベースではなくテキストベースのテンプレートであるため、XML やHTMLに限らず、EメールやJavasScript、CSVなど、どんなテキスト
フォーマットにもテンプレートを使えます。 • テンプレート継承を使えばいい感じのUIをいい感じに使えます。
リクエスト処理に関するフロー図 URLディスパッチャ ビュー モデル テンプレート システム キャッシュシステム 管理 インターフェース プロジェクト設定
ファイル プロジェクト管理用 スクリプト Django管理用 スクリプト アプリケーション C キャッシュ RDB プロジェクト
テンプレートに関すること <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 ファイル
cssに関すること Cascading Style Sheets (CSS)とは、HTMLな どのマークアップ言語で書かれたWebサイ トの見た目や書式を記述するための言語 です。
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
cssに関すること mysite/settings.pyファイルに STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), ) を記載する。 manage.pyのディレクトリにstaticファイルを作る。
cssに関すること static css blog.css CSSの下にblog.cssを作成します。
cssに関すること h1 a { color:#FCA205; } h1 a はCSSセレクタです。h1 要素の中にあるa
要素 (例:このようなコードのこと <h1><a href="">link</a></h1>)にスタイルを適用しますという意味になります。この場合、テキス トの色を#FCA205、オレンジ色にする、という意味です。もちろん、あなたの好きな色に変 更してもいいです.
cssに関すること <link rel="stylesheet" href="{% static 'css/blog.css' %}"> これを記述するといいのですがすべてを記述していくのは非常に 面倒ですのでオープンソースのテンプレートを記述していきます。
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' %}"> これを記述するといいのですがすべてを記述していくのは非常に 面倒ですのでオープンソースのテンプレートを記述していきます。
$休憩
テンプレートの拡張 ウェブサイトを作る時、どのページでも同じHTMLタグを使うことがありますよ ね。たとえば、ヘッダーやフッター部分は、どのページでも同じものを使いま す。そういう時に、全てのHTMLファイルに対して、同じ作業を繰り返さなくて すみます。一箇所だけ変更すれば、その変更は全てのページに適用されま す。 では、やっていきます。 https://github.com/nwiizo/Django_Fukuoka/blob/master/django_stady/mysi te/mysite/blog/templates/blog/base.html を見ていきましょう!!!
テンプレートの拡張 base.html に block を記述しました。そうすると、別のテンプレートの内 容を、この block の部分に挿入することが出来るようになります。これ が、テンプレートの拡張です。 {%
block content %} {% endblock %}
テンプレートの拡張 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 %}
テンプレートの拡張 extendsで読み込みをしています。 {% extends 'blog/base.html' %}
テンプレートの拡張 extendsで読み込みをしています。 {% extends 'blog/base.html' %}
課題() ブログ記事の追加と編集をウェブサイト 上で出来るようにしましょう
最後に。 • PythonとRubyの表現力はあまり変わらないので Railsでも同じ開発コストで同じようなものができる。 • 1.10になってバグでハマることもなくなった。 • 就職で東京に行くので時期的にも福岡で最後の勉 強会なのでみんなにもっと頑張って盛り上げてほし い