정적 파일 관리하기(e.g. 이미지, 자바스크립트, 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’를 참조하십시오.

예를 들어 : setting:〉인 경우입니다.STATIC_URL’은 다음 조각을 URL에 추가하여 《/static/》ness로 정의됩니다.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)

주석

이 도우미 기능은 디버그 모드에서만 작동하며 지정된 접두사가 로컬(예: 《/static/》)이고 URL(예: 《http://static.example.com/》)이 아닌 경우에만 작동합니다.

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

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

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

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

예를 들어 : setting이 다음과 같은 경우입니다.〉MEDIA_URL’은 《/media/ness》로 정의되며, URL에 다음과 같은 조각을 추가하여 이 작업을 수행할 수 있습니다.py: 아니요, 그렇지 않습니다.

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)

주석

이 도움말 기능은 디버그 모드에서만 작동하며 지정된 접두사가 로컬(예: 《/media/》)이고 URL(예: 《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