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

sunnnwo님의 프로필 이미지
sunnnwo

작성한 질문수

실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍

404 & 500 Error Template(에러 템플릿) 만들어 보기

handler, static 질문이 있습니다.

해결된 질문

작성

·

89

·

수정됨

0

안녕하세요,

mysite>urls.py

handler404 = 'mysite.views.error_404_view' # #404에러 발생시 처리 handler500 = 'mysite.views.error_500_view'

이렇게 작성하고,

views.py 에서 def 로 함수 정의해서 쓰는데요.

handler404, handler500 views.py에 context로 연결하는 예제 하나만 보여주시면 안될까요.

원래 질문은 handler404, handler500를 어디에 쓰는지 모르겠다 였는데, 강의 후반부에 context로 연결해서 쓴다고 말씀해주셔서 질문을 바꿨습니다.

 다른 질문은 static 부분에서

main.html 에서

<img src = "{% static 'mysite/django.png' %}" alt="Django image" />

이렇게 작성해서 사용하는데, static을 settings.py에 정의해서 사용하신다고 알려주셨는데, 어떤 부분과 대응 되는지 잘 모르겠습니다. STATIC_URL ='/static/' 이부분 뒤로 붙어서

static/mysite/django.png 이런식으로 읽어오게 되는게 맞을까요?

질문 받아주셔서 감사합니다.

답변 2

1

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

Static관련 질문의 답변은 말씀하신 것이 맞습니다.

settings.py에서 정의한 STATIC_URL이, 템플릿에서 사용하는 {% static %}와 연결되어 있습니다.

이 코드는 STATIC_URL 값과 함께 mysite/django.png 경로를 결합하여 브라우저가 접근할 수 있는 전체 URL을 만들어 줍니다.

만약 STATIC_URL = '/static/'으로 설정되어 있다면, Django는 이를 다음과 같은 URL로 변환합니다

/static/mysite/django.png

즉, 최종적으로 브라우저에서는 /static/mysite/django.png 경로에서 이미지를 불러오게 되는 것이죠.

1

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 sunnnwo님,

아래와 같이 render를 사용하셔서 views.py에 넣으시고

from django.shortcuts import render

# Custom 404 handler
def custom_page_not_found_view(request, exception):
    return render(request, 'errors/404.html', status=404)

# Custom 500 handler
def custom_error_view(request):
    return render(request, 'errors/500.html', status=500)

404.html 파일은 errors 디렉토리 안에 넣으시고

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Page Not Found</title>
</head>
<body>
    <h1>404 - Page Not Found</h1>
    <p>Sorry, the page you're looking for does not exist.</p>
    <a href="/">Go back to homepage</a>
</body>
</html>

500.html 파일은 errors 디렉토리 안에 넣으시고

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Server Error</title>
</head>
<body>
    <h1>500 - Internal Server Error</h1>
    <p>Oops! Something went wrong on our end. Please try again later.</p>
    <a href="/">Go back to homepage</a>
</body>
</html>

마지막으로 urls.py안에는 요런식으로 하시면

from django.conf.urls import handler404, handler500
from . import views

handler404 = 'myapp.views.custom_page_not_found_view'
handler500 = 'myapp.views.custom_error_view'

urlpatterns = [
    # your URL patterns
]

아래와 같은 url에 에러가 났을 때 그 페이지가 렌더링 되게 됩니다.


def some_view(request):
    raise Exception("This is a server error")

보통 404는 페이지나 링크가 존재하지 않을 때 사용하시고, 500은 서버에서 에러가 났을때, 즉 코드가 에러가 났을 때 보여주면 됩니다.

sunnnwo님의 프로필 이미지
sunnnwo
질문자

친절한 답변 너무나 감사드립니다.

해외에서 혼자 공부하느라 제가 생각하는게 맞는지 확인할 방법이 별로 없었는데, 너무 감사합니다.

sunnnwo님의 프로필 이미지
sunnnwo

작성한 질문수

질문하기