programing

STATICFILES_DIR, STATIC_ROOT 및 MEDIA_ROOT의 차이점

i4 2023. 8. 19. 09:44
반응형

STATICFILES_DIR, STATIC_ROOT 및 MEDIA_ROOT의 차이점

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

제 말이 맞는지 잘 모르겠습니다. 저는 다음을 사용하고 있습니다.MEDIA_ROOT사진을 ( 업드한사를기저하장통해(진로통를)))models.ImageField())

하고 JS에서 JS 스크립트를 생성했습니다admin.py미디어를 아래와 같이 정의했습니다.

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

그리고 나의settings.py:

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

그리고 나는 추가했습니다.custom.jsSTATIC_ROOT/admin/custom.js하지만 효과가 없습니다.오류를 수 . 404 던지기 오류입니다.

그리고 나서 나는 그것을 바꿉니다.STATIC_ROOTSTATICFILES_DIRS그리고 그것은 작동합니다!!

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

그래서, 저는 여기서 무슨 일이 일어나고 있는지 이해할 수 없습니다.사실, 나는 단지 무엇이 다른지 이해할 수 없습니다.STATIC_ROOT그리고.STATICFILES_DIRS.

virtualenv를를 테스트하고 아직 . 를 통해 Django를 테스트하는 가 무엇입니까?STATIC_ROOT안 되나요?

발전

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

에 개발중에중STATIC_ROOT아무것도 하지 않습니다.설정할 필요도 없습니다.앱의 에서 정적 파일을 (Django 각는내찾습파다니일을정적서에리터렉의앱디(▁d▁inside다찾습니▁files▁static▁each).myProject/appName/static자동으로 서비스를 제공합니다.

이것이 바로 에 의해 행해진 마법입니다.manage.py runserver 때에DEBUG=True.

배포

프로젝트가 실행되면 상황이 달라집니다.당신은 Django를 사용하여 동적 콘텐츠를 제공할 것이고 정적 파일은 Nginx에서 제공될 것입니다.왜냐하면 Nginx는 엄청나게 효율적이고 Django의 작업량을 줄일 것이기 때문입니다.

가 여가바로기로가 있는 곳입니다.STATIC_ROOTNginx는 당신의 장고 프로젝트에 대해 아무것도 모르고 정적 파일을 어디서 찾아야 하는지 모르기 때문에 편리해집니다.

그래서 당신이 설정합니다.STATIC_ROOT = '/some/folder/' 파일을 찾으라고 Nginx에게 ./some/folder/그리고 당신은 도망가manage.py collectstatic 모든 앱의 을 그리장고당가지고있는모든앱다것입니복파사할일을에 복사할 것입니다./some/folder/.

정적 파일에 대한 추가 디렉터리

STATICFILES_DIRS의 추가 디렉터리를 포함하는 데 사용됩니다.collectstatic를 들어,장고를 인식하지 못합니다./myProject/static/직접 포함할 수 있습니다.

STATIC_URL = '/static/'

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

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

이러한 설정은 Django 설명서에서 확인할 수 있습니다.다음은 설명서의 정의와 인용문입니다.

  • MEDIA_ROOT는 를사여파업폴더다니입로한드를 사용하여 입니다.FileField갈 겁니다.

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

  • STATIC_ROOT는 정적 입니다.manage.py collectstatic

    로, " " " " " " 입니다.collectstatic배포를 위해 정적 파일을 수집합니다.

    에 약에만.staticfilescollectstaticmanagement 명령은 정적 파일을 이 디렉터리로 수집합니다.사용에 대한 자세한 내용은 정적 파일 관리 방법을 참조하십시오.

  • STATICFILES_DIRSDjango가 추가 정적 파일을 검색하는 폴더 목록입니다.static설치된 각 앱의 폴더.

    이 설정은 다음과 같은 경우 정적 파일 앱이 이동할 추가 위치를 정의합니다.FileSystemFinderFinder가 활성화되었습니다. 예를 들어, 사용자가collectstatic또는findstatic관리 명령을 사용하거나 정적 파일 서빙 보기를 사용합니다.

설정에서 다음을 수행해야 합니다.

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__)))

기본 Django에 정의된 대로settings.py지금이다.

사이의 차이STATICFILES_DIRS그리고.STATIC_ROOT

STATICFILES_DIRS정적 파일이 있는 다른 디렉터리(앱 디렉터리일 필요는 없음)를 포함할 수 있으며 이러한 정적 파일은 실행 시 STATIC_ROOT에 수집됩니다.collectstatic그러면 이러한 정적 파일이 웹 서버에서 제공되고 STATIC_ROOT에서 제공됩니다.

이 있는 한 후 STATIC_ROOT 파일을 STATIC_ROOT 디렉토리에 .STATICFILES_DIRS.당신의.STATIC_ROOT디렉터리는 비어 있어야 하며 모든 정적 파일은 해당 디렉터리에 수집되어야 합니다.

MEDIA_ROOT여기서 미디어 파일은 업로드된 모든 파일로 이동합니다.: 예지이, 파일

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

하지만 효과가 없습니다.404 던지기 오류를 찾을 수 없습니다.

404 오류는 부분적으로 파일 경로의 선행 슬래시 때문입니다.

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

반응형