【17/8/25】副業12日目
前回は、師匠から教えてもらったQuerySet.value()で値を取り出して、ゼロパディングに加工した値をzeropad_idというキーで辞書へ挿入。それを、Templateに反映させるところまでやった。
その後は師匠の作成したプログラムをみて、「コンテキストの使い方」と「TemplateからView.pyへの値の渡し方」がわかった。
今回は以下を進めてみる。
1.トップページでCSSを読み込ませながらキャプチャ画面が表示される ようにする。
2.検索機能を実装してみる。
1の実装
{% for site in sites_dict %}
<li class=”clearfix”>
<dl>
<dt>{{ site.name }}</dt>
<dd>{{ site.created_at }} 登録</dd>
</dl>
<p class=”temp-capture” style=”background-image:url(‘{% static ‘upload/’ %}{{ site.zeropad_id }}.png’)”></p>
</li>
{% endfor %}ここは想定どおり。
検索機能の追加
検索機能の実装において、実装方法が間違っているのか、CSRFトークンが影響しているのか切り分けが難しいため、一度CSRFの機能をはずすことにした。
プロジェクトのsettings.pyで以下をコメントアウト。
#’django.middleware.csrf.CsrfViewMiddleware’,次に必要最低限の実装で検索ボタンが押された際に、searchページに飛ぶ実装をする。下記の実装で、フォーム内に描画された虫眼鏡ボタンをクリックすることで、サーバの“/search”にアクセスする。
top.html<form action=”/search” method=”post”>
<input type=”search” name=”search” placeholder=”キーワード”>
<input type=”image” src=”{% static ‘img/btn_search.png’ %}” name=”submit” alt=”検索”>
次に、urls.pyにルーティングを記載する。下記の実装で"/search”にアクセスすると、view.py内のsearchメソッドが呼びだされる。
top/urls.pyurlpatterns = [
# トップページ
url(r’^$’, views.top, name=’top’),
# 検索ページ
url(r’^search$’, views.search, name=’search’), ←追加
]
次にsearchメソッドを記載する。下記の実装でsearch.htmlがレンダリング(表示)される。
def search(request):
return render(request, ‘search.html’)Djangoでフォームを使った方法は、以下のサイトが詳しく記載されているので次回読み込む。
続く。
補足(備忘):
QuerySetの返す結果に制限する方法があったので、備忘で記載しておく。
クエリセットの返す結果を特定の個数に制限したい場合には、 Python の配列スラ イス表記を使います。これは SQL の
LIMIT節やOFFSET節と等価です。以下の例は、最初の 5 オブジェクトだけを返します (
LIMIT 5に相当します):>>> Entry.objects.all()[:5]
http://docs.djangoproject.jp/en/latest/topics/db/queries.html

