programing

Django의 STATIC_URL과 STATIC_ROOT의 차이

magicmemo 2023. 5. 11. 21:21
반응형

Django의 STATIC_URL과 STATIC_ROOT의 차이

때문에 혼란스럽습니다.static root그리고 일을 명확히 하고 싶습니다.

하려면 Django 서에정파제공다합있니다야어음이면려적하에 .settings.py그리고.urls.py:

import os
PROJECT_DIR=os.path.dirname(__file__)

정적 파일을 수집할 디렉터리의 절대 경로

STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')

정적 파일의 URL 접두사

STATIC_URL = '/static/'

정적 파일의 추가 위치

STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)

...그리고.urls.py다음 행:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
    r'^static/(?P<path>.*)$',
    'django.views.static.serve',
    {'document_root': settings.STATIC_ROOT}
))

사용하기도 합니다.python manage.py collectstatic

질문:

  1. 누구든지 이상적으로 어떻게 해야 하는지 워크플로우에 대해 설명해 주시겠습니까?현재, 저는 위의 코드 스니펫을 복사/붙여 지정된 위치에 붙여넣고 정적 디렉터리에 새 파일을 계속 만들면 작동합니다.내 안에서settings.STATIC_ROOT하지만 다른 디렉터리를 가리켰습니다.

  2. 각 설정의 워크플로우, 즉 파일 수집 및 관리 방법 및 수행해야 할 모범 사례에 대해 설명해 주시면 감사하겠습니다.

감사해요.

정적_ROOT

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

자, 제이 을 내립니다../manage.py collectstatic 파일의 정적 파일)을 모든정앱파(일정적폴을모, 정파적일다의니경) 합니다./var/www/example.com/static/이제 Apache 또는 nginx 등에서 이 디렉터리를 서비스하기만 하면 됩니다.

정적_URL

URL에서 정적 은 그중정있다습니이일파에 있습니다.STATIC_ROOT디렉토리는 Apache 또는 nginx 등에 의해 제공됩니다.예: 또는

설정하는 경우STATIC_URL = 'http://static.example.com/'그러면 당신은 서비스를 제공해야 합니다.STATIC_ROOT, 폴즉더즉,"/var/www/example.com/static/") 또는 url ) url은 apache 파일 nginx 파일입니다'http://static.example.com/' 파일을 할 수 )'/var/www/example.com/static/jquery.js'와 함께'http://static.example.com/jquery.js')

이제 장고 템플릿에서 다음과 같이 참조할 수 있습니다.

{% load static %}
<script src="{% static "jquery.js" %}"></script>

다음을 렌더링합니다.

<script src="http://static.example.com/jquery.js"></script>

STATICFILES_DIRS여기에 프로젝트의 정적 파일(예: 템플릿에서 사용하는 파일)을 보관할 수 있습니다.

STATIC_ROOT 것을비워, 당이할때가 됩니다.manage.py collectstatic시스템에서 모든 정적 파일을 검색하여 여기로 이동합니다.정적 파일 서버는 위치에 상관없이 이 폴더에 매핑되어야 합니다. 실행 후 구조를 수 있습니다. collectstatic 실확시장고구디축구렉찾조있수다니습을를리.

------편집-------------------

@DarkCygnus가 지적했듯이 STATIC_ROOT는 파일 시스템의 디렉토리를 가리키며, 폴더는 Django에 의해 채워지기 때문에 비어 있어야 합니다.

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

또는

STATIC_ROOT = '/opt/web/project/static_files'

------편집 종료 -----------------------------------------

STATIC_URL'/는) 으로 괜찮습니다. 입니다.' /static/'는(는) 기본적으로 사용됩니다. 정적 파일의 접두사일 뿐입니다.

2022년 5월 업데이트:

먼저 "STATIC_ROOT"에 대해 설명하고 "STATIC_URL"에 대해 설명합니다.

<정적_ROOT>

"STATIC_ROOT"django 프로젝트의 앱 및 관리자에 사용되는 정적 파일이 저장되는 폴더의 절대 경로를 설정하고 아래 명령을 실행하면 폴더가 생성되며 django 프로젝트의 관리자에서 정적 파일이 폴더수집됩니다(*"STATIC_ROOT" 설정은 정적 파일 URL에 영향을 주지 않습니다).

python manage.py collectstatic 

또한 "STATIC_ROOT"는 아래와 같이 "DEBUG = False"운영 모드에서만 작동합니다.

# "core/settings.py"

DEBUG = False // Production Mode

이제 "settings.py "이 있는 "core" 폴더에는 정적 파일 "core.js"가 있고 "myapp.dll"은 아래와 같이 "app" 폴더에는 "myapp.dll"이 있는 django 프로젝트가 있습니다.

여기에 이미지 설명 입력

그리고 아래와 같이 "venv" 폴더의 "admin" 폴더에 "css", "fonts", "img" 및 "js" 폴더가 있습니다.*이 django 프로젝트에 "venv"라는 이름의 가상 환경을 사용하므로 "admin"의 정적 파일이 이 프로젝트에 있고 "admin" 폴더에 대한 상대 경로"venv/lib/python3.8/site-packages/django/contrib/admin/static/admin"입니다.

여기에 이미지 설명 입력

그런 다음 "os.path.join(BASE_DIR, 'static')"을 설정합니다. 이는 "C:\Users\kai\django-project\static"을 Windows에서 "STATIC_ROOT"로 변경합니다.또한 "STATIC_ROOT"앞서 말한 대로 운영 모드에서만 작동하므로 "False"를 "DEBUG"로 설정합니다.

# "core/settings.py"

DEBUG = False // Production Mode

STATIC_ROOT = os.path.join(BASE_DIR, 'static') // Here
STATIC_URL = '/static/'

이제 다음 명령을 실행합니다.

python manage.py collectstatic 

그런 다음 "static" 폴더가 생성되고 "admin" 폴더의 "css", "fonts", "img" 및 "js" 폴더와 "myapp" 폴더의 "myapp.css" 폴더는 아래와 같이 "static" 폴더로 수집되지만, "core.js"는 앞에서 언급했듯이 "python manage" 명령어아래와 같이 "static" 폴더로 수집되지 않습니다.py collectstatic"은 django 프로젝트의 앱과 관리자로부터 정적 파일을 수집하지만 "settings.py "이 있는 "core" 폴더는 앱과 관리자가 아닙니다.따라서 "core" 폴더의 "core.js"가 "static" 폴더로 수집되지 않습니다.

여기에 이미지 설명 입력

그러나 "core" 폴더의 "core.js"를 "static" 폴더로 수집하는 방법이 있습니다.그러기 위해서는 "STATICFILES_DIRS"를 사용한 다음 os.path.join(BASE_DIR, 'core/static')을 설정해야 합니다. 이는 "C:\Users\kai\django-project\core\static"은 Windows에서 아래와 같이 "STATICFILES_DIRS"로 이동합니다.

# "core/settings.py"

DEBUG = False

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

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

다시 아래 명령을 실행합니다.

python manage.py collectstatic 

그런 다음 "예"를 입력한 후 "엔터"를 눌러 기존 "정적" 폴더를 덮어씁니다.

설정에 지정된 대로 대상 위치에서 정적 파일을 수집하도록 요청했습니다.

C:\Users\kai\django-project\static

기존 파일을 덮어씁니다!정말 이 일이 하고 싶은 거예요?

계속하려면 '예'를 입력하고 취소하려면 '아니오'를 입력하십시오.

이제 "core" 폴더의 "core.js"가 아래와 같이 "static" 폴더로 수집됩니다.

여기에 이미지 설명 입력

<정적_URL>

다음으로 "STATIC_URL"에 대해 설명하겠습니다.

"STATIC_URL"은 아래와 같이 정적 파일 URL의 호스트 부분과 정적 파일 URL의 파일 부분 사이정적 파일 URL의 앞 디렉터리 부분설정합니다(*"STATIC_URL" 설정은 adjango 프로젝트에서 관리자에 사용되는 정적 파일이 저장되는 폴더의 절대 경로에 영향을 주지 않습니다).

       |     Host      |   Directory    |  File  |
       |               |Front |  Back   |        |
        <-------------> <----> <-------> <------>      
https://www.example.com/static/admin/css/base.css

예를 들어 아래와 같이 '/STATIC/'"STATIC_URL"로 설정합니다(*"STATIC_URL"은 "DEBUG = True"개발 모드와 "DEBUG = False"운영 모드 모두에서 작동합니다.

# "core/settings.py"

DEBUG = False

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

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/' # Here

그런 다음 장고 관리자를 엽니다.

여기에 이미지 설명 입력

그런 다음 "F12"를 눌러 "Developer Tools"를 열어 "Sources"에서 현재 열려 있는 Django Admin 페이지에 사용되는 리소스를 확인하고 "admin"에 대한 정적 파일을 "static" 폴더에 수집했습니다.

여기에 이미지 설명 입력

그런 다음 "css""base.css"를 마우스로 이동하여 URL을 확인합니다.

여기에 이미지 설명 입력

보다시피 전면 디렉토리 부분을 "static"으로 설정할 수 있습니다.

                       Here  
                     <------>
http://localhost:8000/static/admin/css/base.css

그리고 아래 URL "www.example.com "의 경우에 해당합니다.

                         Here
               <------>
https://www.example.com/static/admin/css/base.css

그리고 전면 디렉토리 부분 "static" "hello/world"변경할 수 있습니다.

따라서 아래와 같이 "STATIC_URL"을 '/STATIC/'에서 '/hello/world/'로 변경하면 됩니다.

# "core/settings.py"

DEBUG = False

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

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/hello/world/' # Here

그런 다음 Django Admin 페이지를 새로 고칩니다.

여기에 이미지 설명 입력

그런 다음, 전면 디렉토리 부분 "static"이 아래와 같이 "hello/world"로 변경됩니다.

                         Here  
                     <----------->
http://localhost:8000/hello/world/admin/css/base.css

위의 모든 답변은 도움이 되지만, 제 문제를 해결한 답변은 없습니다.에서 내 은 "STATIC_URL"이었습니다.https://<URL>/static개발자 설정을 참조하십시오.py 파일에서 동일한 STATIC_URL을 사용했습니다.

이로 인해 django/conf/session/static.py 에서 자동 오류가 발생합니다.

시험은elif not settings.DEBUG or '://' in prefix:패턴을 수 . " " " URL" '/' " " " " " " 은 URL 에서 사용할 수 있습니다.

장고가 사용할 수 없다는 오류 메시지를 뱉으면 사려 깊을 것입니다.http(s)://와 함께DEBUG = True

STATIC_URL을 '/static/'(으)로 변경해야 했습니다.

Django 3.1+ 이후에는 디렉터리 경로의 구성에 약간의 변화가 있지만, 물론 개념은 동일합니다.

정적 FILES_DIRS

STATICFILES_DIRS = [
    BASE_DIR / 'static',
    BASE_DIR / 'app_1/static',
    BASE_DIR / 'app_2/static',
]

이름에서 알 수 있듯이 디렉터리 목록입니다.정적 파일에 대해 둘 이상의 디렉터리를 지정하는 데 사용됩니다.앱의 재사용 가능성을 위해 가장 유용합니다.모든 정적 파일에 대해 하나의 디렉터리를 갖는 대신, 각 앱은 독립적인 디렉터리를 가집니다.각각의 앱에 대한 템플릿과 같습니다.

앱의 정적 파일 디렉터리를 구성하는 방법

=> my_app
    => static
        => my_app
            => css
            => js

개발 모드에서 다음 명령을 사용합니다.python manage.py runserverDjango는 다음을 사용하여 정적 파일을 검색합니다.STATICFILES_FINDERS설정기본적으로 STATICFILES_DIRS 설정에 나열된 폴더에서 요청된 정적 파일을 찾습니다.실패할 경우, Django는 다음을 사용하여 파일을 찾으려 합니다.django.contrib.staticfiles.finders.AppDirectoriesFinder프로젝트에 설치된 모든 응용프로그램의 정적 폴더를 찾습니다.

정적_ROOT

STATIC_ROOT = BASE_DIR / 'static'

은 이경는디대절경다니로입대한에리렉터가 있는 의 절대 입니다.python manage.py collectstatic배포를 위해 정적 파일을 수집합니다.예:

/var/www/example.com/static/"

위해 개을위구필없습다니를 구성할 .STATIC_ROOT하지만 생산에 매우 중요합니다.Nginx, Apache 서버가 웹 사이트의 정적 파일에 액세스하는 경로입니다.

정적_URL

STATIC_ROOT에 있는 정적 파일을 참조할 때 사용할 URL.예: "static/" 또는 "http://static.example.com/ "

STATIC_URL = '/static/'

이제, 제가 다음을 구성하기로 결정했다고 가정해 보겠습니다.STATIC_URL='/asset/'그럼 옷을 갈아입어야겠네요STATIC_ROOT=BASE_DIR / 'asset'그리고 내 디렉토리의 이름도 다음과 같아야 합니다.asset.

참조:

https://docs.djangoproject.com/en/4.0/ref/contrib/staticfiles/

언급URL : https://stackoverflow.com/questions/8687927/difference-between-static-static-url-and-static-root-on-django

반응형