[python] Django의 collectstatic의 요점은 무엇입니까?

이것은 아마도 어리석은 질문 일 것입니다. 그러나 그것은 제 머릿속을 클릭하는 것이 아닙니다.

Django에서 규칙은 앱과 관련된 모든 정적 파일 (예 : css, js)을 static 이라는 폴더에 넣는 것 입니다. 따라서 구조는 다음과 같습니다.

mysite/
    manage.py
    mysite/ --> (settings.py, etc)
    myapp/ --> (models.py, views.py, etc)
        static/

에서 mysite/settings.pyI 있습니다 :

STATIC_ROOT = 'staticfiles'

따라서 명령을 실행할 때 :

python manage.py collectstatic

staticfiles루트 수준에서 라는 폴더를 생성합니다 (과 동일한 디렉토리 myapp/).

이것의 요점은 무엇입니까? 내 모든 정적 파일의 복사본을 만드는 것이 아닙니까?



답변

여러 앱의 정적 파일을 단일 경로로 수집

글쎄, 하나의 Django 프로젝트 는 여러 개의 앱을 사용할 수 있습니다 . 그래서 거기에는 하나만 있지만 myapp실제로 myapp1myapp2, 등

개별 앱 내부에서 단일 폴더로 복사하여 프런트 엔드 웹 서버 (예 : nginx)를 해당 단일 폴더로 지정 STATIC_ROOT하고 여러 경로에서 정적 파일을 제공하도록 웹 서버를 구성하는 대신 단일 위치에서 정적 파일을 제공 할 수 있습니다. .

ManifestStaticFilesStorage가있는 영구 URL

MD5 해시에 대한주의 사항 버전의 파일 이름에 추가되는 : 그것은의 기본 동작의 일부가 아니다 collectstatic으로,settings.STATICFILES_STORAGE 기본값 StaticFilesStorage(그렇게하지 않는)

MD5 해시는 예를 들어 사용하도록 설정하면 시작됩니다. ManifestStaticFilesStorage .

이 저장소의 목적은 일부 페이지가 여전히 해당 파일을 참조하는 경우 (예 : 사용자 또는 타사 프록시 서버에 의해 캐시 된 경우) 이전 파일을 계속 제공하는 것입니다. 또한 향후 페이지 방문의로드 시간을 단축하기 위해 배포 된 파일에 먼 미래의 Expires 헤더를 적용하려는 경우 매우 유용합니다.


답변

Django 정적 파일은 여러 위치에있을 수 있습니다. 여러 위치에서 올/static/img/icon.png 수있는 것처럼 제공되는 파일입니다 . 기본적으로:

  • FileSystemFinder를 찾습니다 img/icon.png각각 STATICFILES_DIRS,
  • AppDirectoriesFinder를 찾습니다 img/icon.pngstatic당신의 각 하위 폴더 INSTALLED_APPS. 이를 통해 Django Admin과 같은 라이브러리가 앱에 자체 정적 파일을 추가 할 수 있습니다.

이제 : manage.py runserverDEBUG = 1로 실행 하는 경우에만 작동합니다 . 라이브로 전환하면 Django 프로세스는 더 이상 정적 자산을 제공하지 않습니다. Django를 사용하여 이러한 서비스를 제공하는 것은 비효율적이며이를위한 더 전문화 된 도구가 있습니다.

대신 다음과 같이해야합니다.

  • 모든 앱에서 모든 정적 파일 찾기
  • 그들 모두를 포함하는 단일 디렉토리 구축
  • 어딘가에 업로드 (a static 웹 서버 또는 타사 파일 저장소 디렉토리).
  • 웹 서버 (예 : nginx)를 /static/*해당 디렉토리에서 직접 제공 하고 다른 요청을 Django로 리디렉션 하도록 구성합니다 .

collectstatic 배포 스크립트에 직접 연결할 수 있도록이 디렉터리를 준비하는 기성 스크립트입니다.


답변

프로덕션 설치에서 영구 URL을 원합니다. 파일 내용이 변경되지 않는 한 URL은 변경되지 않습니다.

이는 Django에서 웹 페이지를 열 때 클라이언트가 컴퓨터에 잘못된 버전의 CSS 또는 JS 파일을 가지지 않도록하기위한 것입니다. Django staticfiles는 파일 변경을 감지하고 그에 따라 URL을 업데이트하므로 CSS 또는 JS 파일이 변경되면 웹 브라우저가 새 버전을 다운로드합니다.

일반적으로 collectstatic실행 중에 파일 이름에 MD5 해시를 추가하면 됩니다.

편집 : 여러 앱에 대한 관련 답변도 참조하십시오.


답변

사이트 내에 여러 장고 앱이있을 때 유용합니다.

collectstatic 그런 다음 모든 앱의 정적 파일을 한 곳에서 수집하여 프로덕션 환경에서 제공 할 수 있습니다.


답변