작성
·
627
·
수정됨
0
안녕하세요 선생님 ㅠㅠ
연달아서 에러가 빵빵 터지네요
Reverse for 'pydenticon_image' with keyword arguments '{'data': ''}' not found. 1 pattern(s) tried: ['identicon/image/(?P<data>.+)/\\Z']
인데요.
문제가 되는 부분은
<img src="{% url 'pydenticon_image' data=user.username %}" style="width: 24px; height: 24px;">
이 부분으로 나옵니다.
Error during template rendering
In template /Users/daniel_choi/Desktop/total_projects/instagram_second/templates/layout.html, error at line 77
Reverse for 'pydenticon_image' with keyword arguments '{'data': ''}' not found. 1 pattern(s) tried: ['identicon/image/(?P<data>.+)/\\Z']
이게 에러 추가 메세지 이구요.
하지만 이것과 관련하여는 잘 작동하다가 그냥 아무것도 만진것없이 echo 쪽만 들락거리고 signup 시도했던 것 밖에 없는데, 되다가 갑자기 에러가 나니깐 당황스럽네요;
(물론 admin을 제외한 계정을 계속해서 삭제하고 시도하긴 했습니다.)
from django_pydenticon.views import image as pydenticon_image
urlpatterns = [
path('identicon/image/<path:data>/', pydenticon_image, name = 'pydenticon_image')
]
이렇게 되어있구요.
accounts/forms.py
에서도 User모델 상속 받고, class Meta로
fields 중에서 username을 분명히 오버라이드 시킨것도 확인이 되는데, 왜 이런 에러가 발생하는지 모르겠습니다! ㅠㅠ
이거는 추가적으로 몇번 테스트를해보니깐
1.계정을 생성한다
2.SMTP에러가 뜬다.
3.admin페이지에 들어가서 방금 생성된 계정을 삭제한다.
4.다시 /accounts/signup페이지에 접속시도한다.
5.<img src="{% url 'pydenticon_image' data=user.username %}" style="width: 24px; height: 24px;">
관련된 reversematch에러가 뜬다.
6.admin페이지에서 admin계정으로 로그인을 하고 accounts/signup 페이지로 와야 비로소 이 reversematch 에러가 뜨지 않습니다.
#번외
번외 적으로는 분명 계정을 생성했고, admin 페이지에서도 2개의 추가계정이 확인되는데, Django administration
(어드민페이지 로그인창)을 통해서 로그인하려고 하면 비밀번호를 맞게 입력해도 로그인이 안됩니다;
답변 2
1
안녕하세요.
아래의 오류에서 정확히 오류 내용을 알려주고 있습니다.
Reverse for 'pydenticon_image' with keyword arguments '{'data': ''}' not found. 1 pattern(s) tried: ['identicon/image/(?P<data>.+)/\\Z']
URL Reverse 오류인 것이죠.
identicon/image/데이터/ 주소 패턴에서는 .+ 로서 마침표(.) 패턴의 문자열이 + (1회 이상) 반복되기를 희망하고 있습니다. 이 패턴에 맞는 data가 지정되어야 URL Reverse에 성공을 하는 거죠.
그런데, 지정된 data 인자는 {'data': ''} 에서도 확인하실 수 있듯이, 빈 문자열입니다. 그래서 URL Reverse에 실패했다는 오류입니다.
아래 코드의 user.username 값이 빈 문자열로서 URL Reverse 시에 참조되었다는 거죠.
{% url 'pydenticon_image' data=user.username %}
이 경우는 2가지 경우입니다.
user.username의 값이 정말 빈 문자열인 경우
혹은 현재 템플릿 render 시에 지정된 context data에 user 인자가 없을 경우 : 장고 템플릿 엔진에서는 참조하고자 하는 context data가 없을 경우, 별도 오류를 발생시키지 않고, 디폴트로 빈 문자열로 참조합니다.
이 경우는 첫번째 경우입니다. 장고에서 로그인하지 않은 상황에서 request.user 는 AnonymousUser 클래스의 인스턴스이며, 로그인된 상황에서는 User 모델의 인스턴스입니다.
AnonymousUser 클래스에서는 username 필드는 빈 문자열입니다.
https://github.com/django/django/blob/4.1.5/django/contrib/auth/models.py#L420
그러니, 관리자로 로그인하셨을 때에는 위 오류가 발생하지 않으셨던 것 입니다.
해당 코드는 user.username 값을 필히 채워넣어주셔야 하구요. 로그인 상황일 때에만 호출되도록 하는 것도 한 가지 방법입니다.
{% if user.is_authenticated %}
{% url 'pydenticon_image' data=user.username %}
{% endif %}
URL Reverse 오류는 개발하시면서 많이 만나시는 오류 중 하나입니다.
이번 기회로 URL Reverse 오류를 인지하고 해결하는 방법을 차근차근 정리해보세요.
화이팅입니다. :-)
0
앗 선생님 지금 에러처리를 하다보니깐 생각난건데요.
Django administration
관련해서
이미 생성된 계정을 admin외의 계정으로 Django administration
에서 로그인하려고 하면 비밀번호가 분명히 맞음에도 #번외와 같은 메세지가 뜹니다. 왜 그런걸까요?(혹시몰라서 계정을 삭제하고 시도하고, 삭제하고 시도하기를 SMTP 과정 반복하면서 10번가까지 시도했던것 같습니다!)
감사합니다! 이번 케이스에 대해서는 설명해 주신 덕분에 이해했고, 해결했습니다!!