강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của daniell82828137
daniell82828137

câu hỏi đã được viết

Hướng dẫn hoàn chỉnh về phát triển dịch vụ web Python/Django với React

Thực hiện sửa đổi hồ sơ và sử dụng TextChoices được thêm vào Django 3

NoReverseMatch at /accounts/signup/

Viết

·

759

·

Đã chỉnh sửa

0

안녕하세요 선생님 ㅠㅠ
연달아서 에러가 빵빵 터지네요

NoReverseMatch at /accounts/signup/

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

(어드민페이지 로그인창)을 통해서 로그인하려고 하면 비밀번호를 맞게 입력해도 로그인이 안됩니다;

스크린샷 2023-01-24 오전 11.38.03.png

pythondjangodockerreact

Câu trả lời 2

1

pyhub님의 프로필 이미지
pyhub
Người chia sẻ kiến thức

안녕하세요.

아래의 오류에서 정확히 오류 내용을 알려주고 있습니다.

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가지 경우입니다.

  1. user.username의 값이 정말 빈 문자열인 경우

  2. 혹은 현재 템플릿 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 오류를 인지하고 해결하는 방법을 차근차근 정리해보세요.

화이팅입니다. :-)

daniell82828137님의 프로필 이미지
daniell82828137
Người đặt câu hỏi

감사합니다! 이번 케이스에 대해서는 설명해 주신 덕분에 이해했고, 해결했습니다!!

0

daniell82828137님의 프로필 이미지
daniell82828137
Người đặt câu hỏi

앗 선생님 지금 에러처리를 하다보니깐 생각난건데요.
Django administration
관련해서
이미 생성된 계정을 admin외의 계정으로 Django administration

에서 로그인하려고 하면 비밀번호가 분명히 맞음에도 #번외와 같은 메세지가 뜹니다. 왜 그런걸까요?(혹시몰라서 계정을 삭제하고 시도하고, 삭제하고 시도하기를 SMTP 과정 반복하면서 10번가까지 시도했던것 같습니다!)

pyhub님의 프로필 이미지
pyhub
Người chia sẻ kiến thức

admin 페이지에서는 staff 권한이 있는 유저만 로그인할 수 있습니다.

staff 권한이 없는 유저는 비밀번호가 맞더라도 admin 페이지에는 로그인할 수 없습니다.

/admin/ 에 접근 시의 로그인 처리 모듈을 admin 앱의 로그인 모듈이기 때문이기에 그렇게 처리되고 있습니다.

daniell82828137님의 프로필 이미지
daniell82828137
Người đặt câu hỏi

오!! 감사합니다!!

Hình ảnh hồ sơ của daniell82828137
daniell82828137

câu hỏi đã được viết

Đặt câu hỏi