How to manage static files (e.g. images, JavaScript, CSS)

웹 사이트는 일반적으로 이미지, JavaScript 또는 CSS와 같은 추가 파일을 제공해야 합니다. Django에서는 이러한 파일을 “static files”라고 합니다. Django는 :mod:’django.contrib.static files’를 제공하여 파일 관리를 도와줍니다.

이 페이지에서는 이러한 정적 파일을 서비스하는 방법에 대해 설명합니다.

정적 파일을 구성하는 중입니다.

  1. “django.contrib.static files”가 다음 설정에 포함되도록 하십시오. INSTALLED_APPS.

  2. 설정 파일에서 다음을 정의합니다.:setting:STATIC_URL, 예를 들어:

    STATIC_URL = 'static/'
    
  3. 템플릿에서 :ttag:’static’ 템플릿 태그를 사용하여 구성된 를 사용하여 지정된:setting:STATICFILES_STORAGE.에 대한 URL을 빌드합니다.

    {% load static %}
    <img src="{% static 'my_app/example.jpg' %}" alt="My image">
    
  4. 정적 파일을 앱의 “static” 폴더에 저장합니다. 예를 들어 다음과 같습니다.``my_app/static/my_app/example.jpg``.

파일을 제공합니다.

이러한 구성 단계 외에도 정적 파일도 실제로 서비스해야 합니다.

개발 중에 :mod:’django.contrib.static files’를 사용할 경우 :설정::djadmin:’runserver’에 의해 자동으로 수행됩니다.DEBUG는 “True”로 설정되어 있습니다(func:”django.contrib.static files” 참조).view.serve’)를 입력합니다.

이 방법은 **총적으로 비효율적**이며 아마도 **불안한**이므로 **운영에 적합하지 않습니다*.

프로덕션 환경에서 정적 파일을 서비스하기 위한 적절한 전략은 :doc:’/how to/static files/deployment’를 참조하십시오.

프로젝트에 특정 앱에 연결되지 않은 정적 자산도 있을 수 있습니다. 앱 내에서 “static/” 디렉토리를 사용하는 것 외에도 디렉토리 목록(:seting:”)을 정의할 수 있습니다.Django가 정적 파일도 찾을 수 있는 설정 파일의 STATICFILES_DIRS)입니다. 예를 들어 다음과 같습니다.

STATICFILES_DIRS = [
    BASE_DIR / "static",
    '/var/www/static/',
]

:설정:’에 대한 설명서를 참조하십시오.정적 파일_입니다.”정적 파일”이 당신의 파일을 어떻게 찾는지에 대한 자세한 내용은 FINDER의 설정입니다.

정적 파일 네임스페이싱

이제 정적 파일을 ``my_app/static/”에 직접 넣어도 (또 다른 ``my_app” 서브디렉토리가 아니라) 벗어날 수 있을지 모르지만, 실제로는 좋지 않은 생각일 것입니다. Django는 이름이 일치하는 첫 번째 정적 파일을 사용하며, different 애플리케이션에서 동일한 이름의 정적 파일이 있는 경우 Django는 이 파일을 구별할 수 없습니다. 우리는 Django를 제대로 가리킬 수 있어야 하며, 이것을 확실히 하기 위한 최선의 방법은 이름 간격*을 정하는 것입니다. 즉, 이러한 정적 파일을 애플리케이션 자체용으로 명명된 *또 다른 디렉토리에 넣습니다.

:seting:’에서 정적 자산의 네임스페이스를 지정할 수 있습니다.staticfiles_DIRS’는 다음과 같이 지정합니다.ref:’prefixs’.

개발 중에 정적 파일을 제공합니다.

위에서 설명한 바와 같이 :mod:’django.contrib.static files’를 사용하는 경우 :설정: :djadmin:’runserver’는 자동으로 이 작업을 수행합니다.DEBUG는 “True”로 설정되어 있습니다. “django.contrib.static files”가 없는 경우 : setting:”으로 설정합니다.설치되었습니다.APPs’에서는 :func:’django’를 사용하여 정적 파일을 수동으로 제공할 수 있습니다.정적이죠.의견을 제시합니다.

이것은 생산용으로 적합하지 않습니다! 일반적인 배포 전략은 :doc:’/how to/static-files/deploy’를 참조하십시오.

For example, if your STATIC_URL is defined as static/, you can do this by adding the following snippet to your urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

주석

This helper function works only in debug mode and only if the given prefix is local (e.g. static/) and not a URL (e.g. http://static.example.com/).

또한 이 도우미 기능은 실제 :seting:’만 제공합니다.STATIC_ROOT’ 폴더. :mod:’django.contrib.static files’와 같은 정적 파일 검색을 수행하지 않습니다.

Finally, static files are served via a wrapper at the WSGI application layer. As a consequence, static files requests do not pass through the normal middleware chain.

개발 중에 사용자가 업로드한 파일을 제공합니다.

개발 중에:설정:에서 사용자가 업로드한 미디어 파일을 제공할 수 있습니다.’MEDIA_ROOT’는 :func:’django’를 사용합니다.정적이죠.의견을 제시합니다.

이것은 생산용으로 적합하지 않습니다! 일반적인 배포 전략은 :doc:’/how to/static-files/deploy’를 참조하십시오.

For example, if your MEDIA_URL is defined as media/, you can do this by adding the following snippet to your ROOT_URLCONF:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

주석

This helper function works only in debug mode and only if the given prefix is local (e.g. media/) and not a URL (e.g. http://media.example.com/).

테스트중

내장된 테스트 클라이언트 대신 실제 HTTP 요청을 사용하는 테스트를 실행하는 경우(즉, 내장된 :class를 사용하는 경우):”LiveServerTestCase >django.test입니다.’라이브서버 테스트 사례’) 정적 자산은 콘텐츠의 나머지 부분에 제공되어야 테스트 환경이 가능한 한 충실하게 실제 데이터를 재현할 수 있지만 ``라이브서버 테스트 사례”는 매우 기본적인 정적 파일 서비스 기능만 갖추고 있습니다. 정적인 파일(static files) 애플리케이션의 파인더 기능에 대해서는 알지 못하며 정적인 내용은 이미 다음과 같은 설정으로 수집되었다고 가정합니다.STATIC_ROOT’입니다.

이 때문에 “정적 파일”은 자체 클래스인 “django.contrib.static files.testing”을 제공합니다.StaticLiveServer TestCase’는 이러한 테스트를 실행하는 동안 모든 자산을 “DEBUG @ True”로 개발 시 얻은 것과 매우 유사한 방식으로 투명하게 처리할 수 있는 내장형 테스트 사례의 하위 클래스로서, 즉 “staticadmin:”collectstatic”을 먼저 사용할 필요가 없습니다.

배치

:mod:’django.static files’는 정적 파일을 한 디렉토리로 수집하여 쉽게 제공할 수 있도록 편리한 관리 명령을 제공합니다.

  1. : setting:’을 설정합니다.STATIC_ROOT’ 설정은 다음과 같이 이러한 파일을 제공할 디렉토리로 설정합니다.

    STATIC_ROOT = "/var/www/example.com/static/"
    
  2. :djadmin:’collectstatic’ 관리 명령을 실행합니다.

    $ python manage.py collectstatic
    

    그러면 정적 폴더의 모든 파일이 :seting:’로 복사됩니다.STATIC_ROOT’ 디렉토리입니다.

  3. 선택한 웹 서버를 사용하여 파일을 제공합니다. :doc:’/how to/static files/deployment’에서는 정적 파일에 대한 몇 가지 일반적인 배포 전략을 다룹니다.

추가사항

이 문서에서는 기본 사항 및 몇 가지 일반적인 사용 패턴을 다룹니다. :mod:’django.contrib.static files’에 포함된 모든 설정, 명령, 템플릿 태그 및 기타 항목에 대한 자세한 내용은 :doc:’static files reference’를 참조하십시오.

Back to Top