2025/11/12 Django - 6

김기훈·2025년 11월 12일

TIL

목록 보기
53/191

오늘 학습 내용

Chapter 06. [블로그] 댓글 기능 만들기

  • Django에서의 Static Files
    • CSS, JavaScript, 이미지 파일 등과 같은 정적 자산을 관리하는 데 사용
    • 이러한 파일들은 서버 측에서 동적으로 생성되지 않으며, 클라이언트에 그대로 제공

Django Static File

  • STATICFILES_DIRS = [STATIC_DIR]
    • 정적 파일들을 모아 관리하기 위해 만든 리스트
  • STATIC_ROOT = BASE_DIR / '.static_root'
    • 배포 시 한 번에 배포하기 위함
      • 배포환경에서 널려져 있는 스태틱 파일들을 한곳으로 모아 관리 가능하게 한 것
  • 둘다 가능하지만 왼쪽은 좀더 명확하게 보이기 위함
    • STATIC_DIR = BASE_DIR / 'static' : 그냥 정의하기 위해 사용한 것

Bootstrap

다운로드

  • 자주 사용하는 js 와 css 가 모여있는 프레임워크

  • 다운로드

    • Compiled CSS and JS
  • base.html

    • href = "../static/css/bootstrap.css" = 정적
    • {% load static %} (import랑 비슷한 기능)
      • href="{% static 'css/bootstrap.css'
    • settings.py 에 STATIC_DIR을 저장했기 때문에
      • static 디렉토리 안에있는 css/js 경로로 시작 가능
      • css/bootstrap.css
      • js/bootstrap.js

Bootstrap 적용하기

  • blog_create.html 과 blog_update.html 을 하나로 합치기
    • blog_update.html 삭제 / blog_create.html 파일명을 blog_form.html 로 변경
    • cb_views.py와 views.py 의 template_name도 변경
      • 작성과 수정 모두 블로그 작성이 나옴

  • 위 처럼 해놓으면 FBV에서는 안나옴
    • 변형
      • btn_name 있으면 btn_name 출력 없으면 '저장' 텍스트 나오도록


댓글 모델 만들기

  • TimestampModel 은 추상 모델 클래스(abstract model class)
    • 이 클래스를 다른 모델 클래스가 상속 받아서 
    • created_at와 updated_at 필드를 자동으로 추가하도록 하기 위한 역할
  • model이 추가되었기 때문에 사용하여 반영
    • python manage.py makemigrations
    • python manage.py migrate

  • admin에서 댓글관리를 할 수 있도록 설정
    • TabularInline
      • Django의 관리자(admin) 인터페이스에서 사용되는 클래스 중 하나
      • 외래 키로 연결된 모델들을 한 줄씩 표 형태로 인라인(inline)으로 표시해주는 역할
      • 이를 통해 관리자는 주 모델의 변경 화면에서 바로 관련된 객체들을 관리 가능
        • 현재 코드에서는 블로그와 관련된 댓글을 하나의 화면에서 편리하게 관리 가능

댓글 작성

  • fields = 넣은 모델에서 어떤 부분을 수정할지

  • wigets = 안넣으면 기본값으로 들어가는데 실제 화면에 보여줄때 어떻게 나타낼지 보여줌

  • textinput = input창 생김(타입은 text)

    • attrs = input안에 특정한 값을 넣고 싶을때
  • {% if request.user.is_authenticated %}

  • 로그인 되어 있는지 체크
    - 로그인이 되어있지 않다면 댓글을 작성할 수 없도록

  • 작성은 되는데 어드민페이지에서만 작성한 댓글이 보임
    • if not comment_form.is_valid(): (유효성 검사 실패 시)
    • if not self.request.user.is_authenticated: (로그인 여부 확인)
    • comment = comment_form.save(commit=False)
      • 댓글 객체를 데이터베이스에 저장하지 않고 반환
    • comment.blog_id = self.kwargs['pk']
      • 현재 블로그 게시글(pk)과 댓글을 연결
    • comment.author = self.request.user
      • 현재 로그인한 사용자를 댓글 작성자로 설정
    • comment.save()
      • 댓글을 데이터베이스에 저장


댓글 작성 2

  • 댓글이 나중에 적은게 아래로 감 = 댓글 역정렬 필요

  • cb_views.py 에 CommentCreateView 를 작성하여

    • 별도의 뷰를 통해 댓글 작성 기능을 제공하는 방식


상세 페이지에 댓글 페이지별로 보여주기 (페이지네이션)

새롭게 알게된 내용

  • Emmet
  • 특정 범위를 드래그 한 후에 tab을 누르면 들여쓰기 한칸
    • shift + tab 를 누르면 안쪽으로 한칸
  • **
test_dic = {
	'a': 1,
  	'b': 2,
	'c': 3    
}

# 두개 동일 
self.test(a=test_dict['a'],b=test_dict['b'],c=test_dict['c'])
self.test(**test_dict) 

test_list =[1, 2, 3]

# 두개 동일 
self.test(test_list[0],test_list[1],test_list[2])
self.test(*test_list)

어려운 내용(추가 학습 필요)

  • 댓글 작성 1 / 2
  • 상세 페이지에 댓글 페이지별로 보여주기 (페이지네이션)

오늘 발생한 문제(발생 했다면)

profile
안녕하세요.

0개의 댓글