인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

meyou1218님의 프로필 이미지
meyou1218

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)

04-09 장고 기본 CBV API (Generic display views) - DetailView

장고에서 song_detail.html을 찾아가는 이유를 모르겠습니다.

작성

·

176

0

본 강의에서 views.py에 urlpatterns배열을 수업 내용인 song_detail에서 song_ddetail로 바꾸고 실행시켜 보았는데 장고에서는 hottrack/song_detail.html을 찾고 있습니다.

urlpatterns에 있는 views.song_detail이 있기때문에 song_detail.html을 찾는게 아닌가용?? 혹시 어떻게 하면 song_ddetail.html과 연결 시킬 수 있을까요??

  1. hottrack / urls.py

from django.urls import path, re_path  # urlpatterns리스트에 필요한 것.

from . import converters  # noqa
from . import views  # view매핑을 위해 임포트.

urlpatterns = [
    path(route="", view=views.index),
    path(route="archives/<date:release_date>/", view=views.index),
    re_path(route=r"^export\.(?P<format>(csv|xlsx))$", view=views.export),
    path(route="<int:pk>/cover.png", view=views.cover_png),
    path(route="<int:pk>/", view=views.song_ddetail), 
]
  1. hottrack/views.py

song_ddetail = DetailView.as_view( # 디테일뷰 구현
    model=Song, # 모델인자로 Song지정함.
)
  1. template

     

 

song_detail 함수를 song_ddetail로 변경하면 작동이 되지 않는데 이유가 무엇인지 궁금합니다.

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

현재 DetailView를 통해 song_detail 뷰를 구현하신 상황입니다.
그리고 model 인자를 지정하신 상황이죠.

DetailView에서는 model 인자가 지정된 경우, 디폴트 template_name 으로서 "앱이름/모델명소문자_detail.html" 파일을 찾습니다.
현재 앱이 hottrack 이고 모델이 Song이니까 hottrack/song_detail.html 템플릿 파일을 찾는 것입니다.
DetailView.as_view 호출을 통해 생성하는 함수 이름과는 전혀 상관이 없습니다.

앱과 모델이 고정된 상태에서 템플릿 이름을 변경하실려면, template_name 인자를 직접 설정하시거나 get_template_names 메서드를 직접 구현하시는 방법이 유일합니다. :-)

--

장고 코드에서는 아래에서 확인해보실 수 있는 데요.

https://github.com/django/django/blob/main/django/views/generic/detail.py#L146

코드가 읽기 어려우실 경우, 아래의 django-vanilla-views 구현체를 살펴보셔도 좋습니다.

https://github.com/encode/django-vanilla-views/blob/master/vanilla/model_views.py#L203


추가 질문 환영하구요. 확인해보시고 댓글 부탁드립니다. :-)

meyou1218님의 프로필 이미지
meyou1218
질문자

아 그렇군요 감사합니다!!

meyou1218님의 프로필 이미지
meyou1218

작성한 질문수

질문하기