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

똘이77님의 프로필 이미지
똘이77

작성한 질문수

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

404에러 예외처리 하는 도중 에러가납니다

작성

·

524

0

Exception in thread django-main-thread: Traceback (most recent call last): File "C:\Users\lee\.conda\envs\askcompany\lib\threading.py", line 973, in _bootstrap_inner self.run() File "C:\Users\lee\.conda\envs\askcompany\lib\threading.py", line 910, in run self._target(*self._args, **self._kwargs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper fn(*args, **kwargs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run self.check(display_num_errors=True) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\management\base.py", line 392, in check all_issues = self._run_checks( File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\management\base.py", line 382, in _run_checks return checks.run_checks(**kwargs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks new_errors = check(app_configs=app_configs) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config return check_resolver(resolver) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver return check_method() File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\resolvers.py", line 407, in check for pattern in self.url_patterns: File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\resolvers.py", line 588, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\resolvers.py", line 581, in urlconf_module return import_module(self.urlconf_name) File "C:\Users\lee\.conda\envs\askcompany\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Dev\askcompany\askcompany\urls.py", line 41, in <module> path('__debug__/', include('debug_toolbar.urls')), File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\urls\conf.py", line 34, in include urlconf_module = import_module(urlconf_module) File "C:\Users\lee\.conda\envs\askcompany\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\urls.py", line 5, in <module> urlpatterns = DebugToolbar.get_urls() File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\toolbar.py", line 145, in get_urls for panel_class in cls.get_panel_classes(): File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\toolbar.py", line 126, in get_panel_classes panel_classes = [ File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\toolbar.py", line 127, in <listcomp> import_string(panel_path) for panel_path in dt_settings.get_panels() File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\django\utils\module_loading.py", line 17, in import_string module = import_module(module_path) File "C:\Users\lee\.conda\envs\askcompany\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\panels\settings.py", line 7, in <module> get_safe_settings = get_default_exception_reporter_filter().get_safe_settings AttributeError: 'SafeExceptionReporterFilter' object has no attribute 'get_safe_settings'
 
구글에 검색해봤는데 정확히 무슨 내용인지 모르겠네요...

답변 3

0

저도 이 에러 만났는데, 가이드 주신걸로 잘 해결했습니다. 감사합니다.

0

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

안녕하세요.

일단 뷰 코드 내에서는 render 함수의 세번째 인자는 context data는 집합(set)이 아니라 사전(dict)으로 지정해주셔야 합니다. {'post', post} 는 집합(set)이구요. 사전인 {'post': post} 가 되어야 합니다.

그리고 이와는 별개로 django와 django-debug-toolbar의 버전 차이로 인해 AttributeError: 'SafeExceptionReporterFilter' object has no attribute 'get_safe_settings' 오류를 만나신 듯 합니다.

  • django는 3.1부터 SafeExceptionReporterFilter에서 get_safe_settings 메서드를 지원했습니다. 3.1 이전에는 SafeExceptionReporterFilter 에 get_safe_settings 메서드가 없었구요.
  • django-debug-toolbar는 3.2.4버전을 끝으로 3.3버전부터 지금의 3.4, 3.5에 이르기까지 SafeExceptionReporterFilter에서 get_safe_settings 메서드를 찾고 있습니다.

그래서 지금의 오류는 django는 3.0 버전을 쓰는 데, django-debug-toolbar를 3.3 버전 이상을 쓰실 때 발생하실 수 있는 오류입니다. django-debug-toolbar는 3.3 이상에서 django 3.1 미만에 대한 하위호환을 지원해주고 있지 않네요.

그러니 강의에서는 django 3.0.x 버전을 쓰실 때, django-debug-toolbar는 3.3 미만을 쓰시면 해결이 되실 듯 합니다.
pip install "django~=3.0.0"
pip install "django-debug-toolbar<3.3"

그리고, 강의가 끝난 후에 django 최신 버전을 쓰시게 되면 django-debug-toolbar 버전도 올리시면 됩니다.

궁금증이 해결되셨다면, 질문의 상태를 해결됨으로 변경 부탁드립니다.

화이팅입니다. :-)

 

0

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

안녕하세요.

보여주신 에러 내역만 봐서는 파악이 어렵네요. 어떤 코드를 작성하셨고, 어떤 코드 변경으로 인해 이 오류가 발생하는 지 정리해서 알러주시겠어요?

화이팅입니다. :-)

똘이77님의 프로필 이미지
똘이77
질문자

def post_detail(request : HttpRequest, pk : int)->HttpResponse:
post = Post.objects.get(pk=pk)
return render(request,'instagram/post_detail.html',{
'post',post,
})


기존코드에서

def post_detail(request : HttpRequest, pk : int)->HttpResponse:
try:
post = Post.objects.get(pk=pk)
except Post.DoesNotExist:
raise Http404
return render(request,'instagram/post_detail.html',{
'post',post,
})

404에러 부분을 표시하게 하는 로직을 변경후 runserver 돌리니

  File "C:\Users\lee\.conda\envs\askcompany\lib\site-packages\debug_toolbar\panels\settings.py", line 7, in <module>

    get_safe_settings = get_default_exception_reporter_filter().get_safe_settings

AttributeError: 'SafeExceptionReporterFilter' object has no attribute 'get_safe_settings'

이런 에러가 떴습니다

다시 소스를 되돌려서 런서버를 돌려도 같은 오류가 나옵니다

일단은 다른 프로젝트 다시 생성 후 진행중입니다

 

 

 

똘이77님의 프로필 이미지
똘이77

작성한 질문수

질문하기