programing

STATICFILES_DIR, STATIC_ROOT 및 MEDIA_ROOT의 차이점

sourcetip 2021. 1. 16. 11:14
반응형

STATICFILES_DIR, STATIC_ROOT 및 MEDIA_ROOT의 차이점


이 세 가지 정적 URL의 차이점은 무엇입니까?

내가 옳은지 잘 모르겠습니다. MEDIA_ROOT업로드 한 사진을 저장 하는 데를 사용하고 있습니다 (를 통해 models.ImageField()).

그러나 관리자와 admin.py. 미디어를 아래와 같이 정의했습니다.

....
class Media:
      js = ('/admin/custom.js', )

그리고 내 settings.py:

 ....
 STATIC_ROOT = "/home/user/project/django1/top/listing/static"

그리고 나는를 추가 custom.js할 수 STATIC_ROOT/admin/custom.js있지만 작동하지 않습니다. 404 찾을 수 없음 오류가 발생합니다.

그리고 나는 변경 STATIC_ROOT에를 STATICFILES_DIRS, 그리고 그것을 작동합니다!

....
STATICFILES_DIRS = "/home/user/project/django1/top/listing/static"

그래서 나는 여기서 무슨 일이 일어나고 있는지 이해하지 못합니다. 사실 STATIC_ROOT의 차이점이 무엇인지 이해하지 못합니다 STATICFILES_DIRS.

현재 아직 배포되지 않은 virtualenv를 통해 내 컴퓨터에서 Django를 테스트하고 있는데 STATIC_ROOT작동하지 않는 이유 입니까 ??


이러한 설정은 Django 문서 에서 찾을 수 있습니다 . 다음은 문서에서 내 자신의 정의와 인용문입니다.

  • MEDIA_ROOT을 사용하여 업로드 한 파일 FileField이 이동할 폴더 입니다.

    사용자가 업로드 한 파일을 보관할 디렉토리의 절대 파일 시스템 경로 입니다.

  • STATIC_ROOT 사용 후 정적 파일이 저장되는 폴더입니다. manage.py collectstatic

    collectstatic배포를 위해 정적 파일을 수집 할 디렉터리의 절대 경로 입니다.

    는 IF staticfiles의 contrib 응용 프로그램이 활성화 (기본값) collectstatic관리 명령은이 디렉토리에 정적 파일을 수집합니다. 사용법에 대한 자세한 내용은 정적 파일 관리 방법을 참조하십시오.

  • STATICFILES_DIRSDjango가 static설치된 각 앱 폴더를 제외한 추가 정적 파일을 검색 할 폴더 목록입니다 .

    이 설정은 FileSystemFinder파인더가 활성화 된 경우 (예 : collectstatic또는 findstatic관리 명령을 사용하거나 정적 파일 제공보기 를 사용하는 경우) staticfiles 앱이 통과 할 추가 위치를 정의합니다 .

설정에 다음이 있어야합니다.

MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

# Make a tuple of strings instead of a string
STATICFILES_DIRS = ("/home/user/project/django1/top/listing/static", )

...어디:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

settings.py이제 기본 Django에 정의 된대로 .


개발

STATIC_ROOT 개발 중에는 쓸모가 없으며 배포에만 필요합니다.

개발 중에는 STATIC_ROOT아무것도하지 않습니다. 설정하지 않아도됩니다. Django는 각 앱의 디렉토리 ( myProject/appName/static) 에서 정적 파일을 찾아 자동으로 제공합니다.

이것은 manage.py runserver때에 의해 행해지는 마법 DEBUG=True입니다.

전개

프로젝트가 시작되면 상황이 달라집니다. Django를 사용하여 동적 콘텐츠를 제공하고 정적 파일은 Nginx에서 제공 할 가능성이 높습니다. 왜? Nginx는 매우 효율적이고 Django의 워크로드를 줄일 수 있기 때문입니다.

곳이다 STATIC_ROOTNginx에 당신의 장고 프로젝트에 대해 아는하지 않는 한, 편리하게 어디 정적 파일을 찾을 모른다.

따라서 STATIC_ROOT = '/some/folder/'Nginx에 /some/folder/. 그런 다음 실행하면 manage.py collectstaticDjango는 필요한 모든 앱에서 정적 파일을 복사합니다 /some/folder/.

정적 파일을위한 추가 디렉토리

STATICFILES_DIRS찾을 추가 디렉토리 를 포함하는 데 사용됩니다 collectstatic. 예를 들어 기본적으로 Django는 /myProject/static/. 따라서 직접 포함 할 수 있습니다.

STATIC_URL = '/static/'

if not DEBUG: 
    STATIC_ROOT = '/home/django/www-data/site.com/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static/'),
]

Difference between STATICFILES_DIRS and STATIC_ROOT

The STATICFILES_DIRS can contain other directories (not necessarily app directories) with static files and these static files will be collected into your STATIC_ROOT when you run collectstatic. These static files will then be served by your web server and they will be served from your STATIC_ROOT.

If you have files currently in your STATIC_ROOT that you wish to serve then you need to move these to a different directory and put that other directory in STATICFILES_DIRS. Your STATIC_ROOT directory should be empty and all static files should be collected into that directory.

MEDIA_ROOT where media files ,all uploaded files goes. Example : Images, Files

ReferenceURL : https://stackoverflow.com/questions/24022558/differences-between-staticfiles-dir-static-root-and-media-root

반응형