작성
·
177
0
본 강의에서 views.py에 urlpatterns배열을 수업 내용인 song_detail에서 song_ddetail로 바꾸고 실행시켜 보았는데 장고에서는 hottrack/song_detail.html을 찾고 있습니다.
urlpatterns에 있는 views.song_detail이 있기때문에 song_detail.html을 찾는게 아닌가용?? 혹시 어떻게 하면 song_ddetail.html과 연결 시킬 수 있을까요??
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),
]
hottrack/views.py
song_ddetail = DetailView.as_view( # 디테일뷰 구현
model=Song, # 모델인자로 Song지정함.
)
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
추가 질문 환영하구요. 확인해보시고 댓글 부탁드립니다. :-)
아 그렇군요 감사합니다!!