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

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

97bennie님의 프로필 이미지
97bennie

작성한 질문수

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

django-pydenticon을 활용하여 프로필 디폴트 이미지 구현

강사님 안녕하세요!

작성

·

247

1

제가 강의 내용을 따라가던도중
 
pydenticon 을 수행하였으나,
 
이런 오류가 납니다...
 
현재 오류는 로그아웃 한 상태이구요..
 
로그인을 하면 되긴합니다만...
 
왜 이렇게 오류가 나는지 모르겠습니다...
 

답변 1

1

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

안녕하세요.

url reverse 시에 사용된 인자는 user.username 이구요.

user 는 settings내의 디폴트 context processors를 통해 지정되었으며, 현재 유저를 나타냅니다. 로그인 상황에서는 User 모델의 인스턴스이구요. 로그아웃 상황에서는 AnonymousUser 클래스의 인스턴스가 됩니다.

AnonymousUser 클래스는 User 모델과 동일한 속성과 함수들을 가지도록 되어있습니다. 아래 링크를 통해 AnonymousUser 클래스를 보시면 username 필드의 값이 빈 문자열로 되어있습니다.

https://github.com/django/django/blob/3.0.14/django/contrib/auth/models.py#L398

askcompany/urls.py 내에서 pydenticon_image 에 대한 path 정의는 다음과 같습니다.

path('identicon/image/<path:data>/', pydenticon_image, name="pydenticon_image"),

위에서 지정된 path 이름의 converter는 정규표현식으로는 ".+" 입니다. 1회 이상 반복을 지정하고 있습니다.

https://github.com/django/django/blob/3.0.14/django/urls/converters.py#L40

그런데, 로그아웃 상황에서의 user.username은 빈 문자열이므로, url reverse 시에 매칭되는 path를 못 찾아서 발생하는 오류입니다.

현재의 url reverse 코드는 로그인 상황에서만 동작하도록 {% if user.is_authenticated %}{% endif %} 로 감싸보실 수 있으시겠습니다.

그리고, 질문 제목에는 본 질문을 요약해서 써주시면, 다른 분들에게도 본 질문이 도움이 될 수 있습니다. 부탁드리겠습니다.

화이팅입니다. :-)

97bennie님의 프로필 이미지
97bennie
질문자

아.. 감사합니다!  제목에는 제가 요약해서 올리도록 하겠습니다.. !

97bennie님의 프로필 이미지
97bennie

작성한 질문수

질문하기