해결된 질문
작성
·
273
·
수정됨
0
이 수업에서 하라는 대로 다 하고 :8000/chat/ 들어가려니까
이런 오류가 뜨면서 막혔습니다 ㅠㅠ
4번이나 훑어봤는데 어디서 틀린건지 모르겠습니다 ㅠㅠㅠ
코드는 진짜 4번이 아니라 8번은 봤습니다 처음부터 끝까지. 틀린 곳은 없습니다...
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
index.html에서 'test'를 숫자로 바꿔주니까 됐습니다
왜 강의에서는 'test'여도 잘 되고 저는 안된건가요?
제가 'test'를 12로 바꾸고 했는데
:8000/chat/은 잘 들어가지지만
테스트 채팅방 들어가기를 누르면 다시 에러가 뜹니다... 그러니까 chat/test/chat이라는 채팅방이 없고
chat/12/chat이라는 채팅방만 존재하니까 그런거 같아요 어떻게 해야하죠?
답변 1
1
안녕하세요.
urls.py에서 제가 추가설명으로 chat/<int:pk>/chat/ 으로 변경하는 것이 더 적합하다고 말씀드렸었는 데요. 이는 chat/숫자/chat/ URL일 경우에만 room_chat 뷰가 호출되는 것이며, 숫자가 아닐 경우에는 URL 패턴에 맞지 않게 됩니다. 그러니 chat/test/chat/ 접근 시에는 NoReverseMatch가 발생하는 것이구요.
그런데, 제 강의 녹화시에는 chat/<str:pk>/chat/ 으로 진행을 했었으니, str패턴으로 정의했으니 chat/test/chat/ 패턴이 매칭이 되었던 것입니다.
urls.py 와 routing.py 에서 <int:pk> 패턴을 <str:pk> 패턴으로 수정해서 진행해주시겠어요?
강의 진행에 혼란을 드려 죄송합니다.
화이팅입니다.
템플릿에서 test 가 아니라 “test”로 문자열을 넘겨주셔야 합니다.
test로 넘겨주시면 context data에서 찾는 데, test 이름의 데이터가 없으니 빈 문자열로서 url reverse가 수행된 것입니다. 빈 문자열에 매칭되는 패턴은 없으니 url reverse error가 발생한 것입니다.
채팅방 구현 강의를 처음부터 다시 차근차근 정확하게 따라해보았습니다.
그 결과, 강의에서 처럼 :8000/chat/에 들어가서 '채팅방 만들기'를 먼저 누른 후, '장고'라는 이름을 지은 후 채팅하는 것은 됩니다.
하지만, :8000/chat/에 들어가서 바로 '일단 테스트 채팅방 진입'을 누른다면 다음과 같은 오류가 뜹니다.
일단은 계속 진행해보겠습니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
아 바로 다음 강의에서 test부분을 지우고 룸 리스트를 불러오는군요! 해결됐습니다!
옙. 인자로 받은 room_pk를 Room 조회에 사용하니, id필드는 숫자이므로 문자열을 받으니 해당 ValueError 오류가 발생한 것입니다.
{% url "room_chat" "test" %} 는 이제 room_pk 조건에 맞지 않는 URL Reverse 식이니, 삭제되어야 하는 것이죠.
화이팅입니다~!! :-)
urls.py와 routing.py에서 <str:room_pk>로 다 바꾸었고
models.py에서도 return "chat-%d" % (room_pk or room.pk)에서
return "chat-%s" % (room_pk or room.pk) 로 바꾸었습니다.
그래도 동일하게 :8000/chat/이 접속이 안됩니다.