iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0

前言、摘要

建立好資料庫之後,我們今天要來完成初步的篩選器功能。
目標是藉由勾選左側的一個Tag,可以找到符合該條件的餐廳。


概念說明

Untitled

  1. 過濾器是用表單來實作,按鈕按下就會送出一個HTTP GET的請求到Django伺服器上。
  2. 我們會收到過濾器的條件,再去資料庫中,找出符合過濾器條件的餐廳,渲染完網頁之後再回傳。

本日成果

首先我們觀察在form_filter.html裡面,會怎麼把勾選的內容存進Request

<div class="form-check form-check-inline">
            <input class="form-check-input" type="checkbox" name="food_style" value={{tag.style}}>
            <label class="form-check-label" for="inlineCheckbox1">{{tag.name}}</label>
        </div>

這邊可以看input的部分,資料會以字典的形式存進Request中,name可以視為字典的key,value就是對應到的值。

view.py

view.py裡面找到index的function,我們會發現每次呼叫都會收到一個request,也就是網站的請求。這部分詳細的細節可以參考這篇文章:

Request and response objects | Django documentation | Django

而現在我們只需要知道,當使用者按下搜尋鍵時,網站就回傳送一個新的request給view,請求新的資料,因此這個request是屬於GET

在原有的function內加入以下程式碼

try:
    if request.GET['food_style']:
         places = Place.objects.filter(tags__style=request.GET['food_style'])
except Exception:
        pass

這裡的’food_style’就是剛剛在index.html裡面看到的name,因此我們使用filter的功能,設定tags__style表示撈出每個placetags的資料,如果有tag的stylerequest中的value相同,則回傳此間place


心得、結語

Template中真的是滿滿的坑啊QAQ有機會把所有經歷過的災難整理成一篇文章給大家避雷。

參考資料

Request and response objects | Django documentation | Django


台南不需要米其林

  1. 專案網址
  2. 專案程式碼
  3. 專案文件與鐵人賽文章
  4. 參賽團隊 台南巷弄美食獵人


上一篇
Day14 不同類型的美味
下一篇
Day16 值得傳承的好味道,確保品質不變。 做好系統測試
系列文
台南不需要米其林30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言