1 minute read

Intro

  • DB에 넣은 데이터를 페이지로 띄워주는 작업을 진행했다.

Works

sqlite + QuerySet 기반 페이지 제작

작업내용

  • views.py의 recommand_new의 내용을 복사하여 어제 만든 sqlite DB의 내용을 꺼내서 사용하는 함수인 recommand_v3를 제작했다.

  • 해당 데이터를 받아와 내용을 표시하는 페이지인 recommand_v3.html 역시 별도로 제작했다.

  • 기존 버전과의 가장 큰 차이는 sqlite DB에서 꺼내오는 데이터의 경우, QuerySet이라는 형태의 데이터로 출력되는데, django template에서 context를 통해 바로 꺼내서 쓸수 있다.

    • 즉, ajax함수를 통해 지저분하게 구현해두었던 기존의 recommand 리스트 코드를 조금 더 깔끔하게 제작하는것이 가능해졌다.

학습한 내용

  • 템플릿 문법 내부의 반복문에서 반복 인덱스를 표시하고 싶을때는 {{forloop.counter}} 또는 {{forloop.counter0}}를 사용한다.

    • 둘의 차이는 인덱스가 1부터 시작하는지, 0부터 시작하는지의 차이.
  • 기존에 제작했던 페이지의 경우, json 데이터를 파싱해서 꺼내오는 방식이었기에 버튼을 눌렀을때 해당 번호의 인덱스를 통해 데이터에 접근하는 방식으로 제작했다.

    • 하지만 새로 제작한 페이지의 경우 템플릿 문법으로 바로 접근하기 때문에 동적으로 생성된 인덱스로는 접근하는데에 한계가 있었다.

    • 따라서 models.py에서 모델 하위에 to_json함수를 제작하여 해당 모델의 함수를 통해 데이터를 json으로 출력할수 있게 제작했다.

    • 모델 데이터와 모델의 데이터를 json으로 출력한것을 함께 context에 넣어 전송했다.

      • 이 TIL을 작성하면서 생각한건데, 이렇게 json으로 다시 만들거면 그냥 기존방식 쓰는게 낫지 않을까 하는 생각이 강렬하게 들었다.

해결하지 못한 문제

  • 거리 필터의 경우, views.py에서 계산을 거쳐 따로 json 데이터에 집어넣는 방식으로 진행했었다.

    • 새로 만든 페이지의 경우, QuerySet에 모든 데이터가 담겨있어 해당 데이터에 거리에 관한 내용을 따로 추가하기 어려울것으로 보인다.

    • 반복문을 통해 일정거리 이상의 레코드를 제거하는 방법도 실행해보았으나, 실행시간이 과도하게 길어져 그만두었다.

      • 특히 식당데이터의 경우, 12만개의 데이터를 하나하나 다 살펴보는것인지 상당한 시간이 소요되었다.