728x90
반응형

환경

  • Python 3.6
  • Django 2.1.1
  • VueJS Single Application

요약

Django의 settings.py 에서 DEBUG = False 일 경우 프론트 페이지에서 static URL로 파일을 엑세스 할 수가 없다.

 

원인

  • static URL을 Django의 가이드 문서대로 아래의 코드와 같이 추가해주면 settings.py에 DEBUG = True에서 설정할 경우 static URL로 접근해도 파일 엑세스에 아무 이상이 없다.
 
from django.conf.urls.static import static

urlpatterns = [
	...
    url(r'^$', index_view, {}, name='index'),
]

# We use a single global DRF Router that routes views from all apps in project
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  • 하지만 실서버일 경우 오류가 발생하였을시 디버깅 내용이 화면에 표시되면 안되기 때문에 DEBUG = False로 설정하고 웹을 기동한다. 그럴 경우 위와 같이 설정할 경우 해당 페이지에 접근하지 못하는 404 (Not Page Found) 오류가 발생한다.
  • 왜일까? django에서는 DEBUG = False 일경우 보안상 정적인 파일의 엑세스를 금지하고 있다. django.conf.urls.static 의 static 함수를 보면 쉽게 내용을 알 수 있다.

대응

그럼에도 불구하고 우리는 DEBUG = False 일 경우도 정적인 URL에 접근을 허용해야 하는 경우가 있다. 이럴 경우 django.conf.urls.static의 코드를 바로 urls.py에 구현해주면 된다.

from django.views.static import serve
from django.urls import re_path

urlpatterns = [
	...
    url(r'^$', index_view, {}, name='index'),
]

urlpatterns += [
    re_path(r'^%s(?P.*)$' % re.escape(settings.STATIC_URL.lstrip('/')), serve,
            kwargs={'document_root': settings.STATIC_ROOT})
]

 

 

728x90
반응형