Day 15 Django for KN

김의석 ·2024년 2월 20일

Django

목록 보기
15/39

Django for KN(Koinonia)

  • 해당 문서는 Django 강의가 리뉴얼 되어 이전 과정들을 복습하는 문서로 작성 됨.

검색지원

  • main 과 body의 차이
    • body는 페이지 전체를 감싸며 모든 콘텐츠를 포함하는 컨테이너이고, main은 페이지 내에서 주요 콘텐츠를 나타내는데 사용됩니다.
# body와 main 태그 예시
<!DOCTYPE html>
<html>
<head>
    <title>페이지 제목</title>
</head>
<body>
    <header>
        <!-- 페이지 헤더 내용 -->
    </header>
    <nav>
        <!-- 네비게이션 내용 -->
    </nav>
    <main>
        <h1>웹 페이지의 주요 내용</h1>
        <p>웹 페이지의 핵심 내용이 여기에 들어갑니다.</p>
        <!-- 페이지의 주요 콘텐츠가 이 부분에 들어갑니다. -->
    </main>
    <footer>
        <!-- 페이지 푸터 내용 -->
    </footer>
</body>
</html>
  • list comprehension
def index(request: HttpRequest) -> HttpResponse:
    query = request.GET.get("query", "").strip()
    melon_chart_url = "https://raw.githubusercontent.com/pyhub-kr/dump-data/main/melon/melon-20230910.json"
    json_string = urlopen(melon_chart_url).read().decode("utf-8")  # json으로 외부 데이터 받기
    # 외부 필드명을 그대로 쓰기보다, 내부적으로 사용하는 필드명으로 변경하고, 필요한 메서드를 추가합니다.
    song_list = [
        Song.from_dict(song_dict) for song_dict in json.loads(json_string)
    ]  # json 파일을 python 객체로 역직렬화
    # print(song_list)

    if query:
        song_list = [
            song
            for song in song_list
            # song은 song_list에서 담아온 SongClass instance이다.
            if query in song.name
            or query in song.artist_name
            or query in song.album_name
        ]

    return render(
        request=request,
        template_name="hottrack/index.html",
        context={"song_list": song_list, "query": query},
    )
  • 검색을 위한 form tag 생성
<form action="" class="col-12 col-lg-auto mb-lg-0 me-lg-3">
	<input type="search" class="form-control form-control-dark text-bg-dark" placeholder="검색어를 입력해주세요."
                       name="query" value="{{ query }}"
                 <!-- value="{{ request.GET.query }}" 상황에 따라 request.GET으로도 바로 가져올  있다 -->
     >
</form>
profile
널리 이롭게

0개의 댓글