【17/8/23】副業10日目
前回は、開発環境の調査を実施し、ViewからTemplateに値を渡す方法を調査して、実際にテスト動作するところまでやってみた。
今日は、DBでデータを取ってきてTopページに一覧表示する部分の開発を進めたいと思う。
以下のサイトがCRUDの基本を抑えており役にたった。
crud/urls.pyfrom django.conf.urls import url
from crud import viewsurlpatterns = [
url(r'^members/$', views.index, name='index'),
url(r'^members/add/$', views.edit, name='add'),
url(r'^members/edit/(?P<id>\d+)/$', views.edit, name='edit'),
url(r'^members/delete/(?P<id>\d+)/$', views.delete, name='delete'),
url(r'^members/detail/(?P<id>\d+)/$', views.detail, name='detail'),
]
url(r'URLのパターンの正規表現', views.pyの対応メソッド, name='ルート名')
r''という記述は''の中では特殊文字をエスケープしないという意味のようです。ルート名はテンプレートでリンク先を指定する際等に利用します。
サイトのキャプチャを表示したいとき、キャプチャ(png)のファイル名をサイトIDに0をつめて10桁の数字にするルールとなっている。
それが、キャプチャの保存先フォルダに保存されるので、HTML側で写真を描画したい場合は、srcで「キャプチャの保存先パス」+「サイトID(0詰め10桁」を指定すれば参照できる。
※この方法はパスを保存する必要がなく、シンプルな設計になる。TreeHouseのときにも有効な手法。
特定桁数を0でつめて10桁の数字にする方法
ゼロパディングというみたい。
Python側でゼロパディングする方法は見つかったが、HTML側に渡されたサイトIDをどうすれば加工できるのか?
サーバ側(Django側)で加工したものを渡したかったが、renderメソッドではひとつの変数(辞書コンテキスト)しか渡せないの模様。。。。
HTML側で加工するのはよろしくない気がするので、サーバ側で加工をしたいが、Modelメソッドで取得したQuerySetオブジェクトをDictに変更したが、どのような形で取り出してよいかわからなかった。誰か教えてくれ。。。
sites = Site.objects.all()
sites_dict = dict(si=sites)print(sites_dict.keys())
print(sites_dict.values())
print(sites_dict.items())
print(sites_dict.QuerySet[0])dict_keys(['si'])
dict_values([<QuerySet [<Site: google>, <Site: lll>]>])
dict_items([('si', <QuerySet [<Site: google>, <Site: lll>]>)])
→print(sites_dict.QuerySet[0])の表示はエラー
ヒントを探すために、前に使ったbottleの記載方法を見たところ、以下のように一度fetchallで取り出しList化し必要に応じてList→Dictで変換かければ生成できるかもしれない。
# items.dbとつなぐ(なければ作られる)
conn = sqlite3.connect(‘items.db’)
c = conn.cursor()
#c.execute(“select id,firstName,lastName,mail,tel,birthday,sex from users order by id”)
c.execute(“select * from users order by id”)
item_list = []
for row in c.fetchall():
item_list.append({
“id”: row[0],
“firstName”: row[3],
“lastName”: row[4],
“mail”: row[1],
“tel”: row[5],
“birthday”: row[6],
“sex”: row[7]
})
conn.close()次回は上記を参考にして、View.pyを編集してみる。
続く。

