【17/8/25】副業12日目

Ryo Uehara
Aug 28, 2017 · 4 min read

前回は、師匠から教えてもらった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

365日備忘録

Full Stack Engineerを目指して

)
    Ryo Uehara

    Written by

    365日備忘録

    Full Stack Engineerを目指して

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade