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
질문:
누구든지 이상적으로 어떻게 해야 하는지 워크플로우에 대해 설명해 주시겠습니까?현재, 저는 위의 코드 스니펫을 복사/붙여 지정된 위치에 붙여넣고 정적 디렉터리에 새 파일을 계속 만들면 작동합니다.내 안에서
settings.STATIC_ROOT
하지만 다른 디렉터리를 가리켰습니다.각 설정의 워크플로우, 즉 파일 수집 및 관리 방법 및 수행해야 할 모범 사례에 대해 설명해 주시면 감사하겠습니다.
감사해요.
정적_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 runserver
Django는 다음을 사용하여 정적 파일을 검색합니다.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
'programing' 카테고리의 다른 글
PowerShell의 함수 반환 값 (0) | 2023.05.11 |
---|---|
C#을 사용하여 Excel용 추가 기능 만들기 (0) | 2023.05.11 |
메이븐 "모듈" vs "프로젝트" (이클립스, m2이클립스 플러그인) (0) | 2023.05.11 |
문자열을 이진으로 변환하는 방법은 무엇입니까? (0) | 2023.05.11 |
디버그 모드에서 프로그램 실행 속도가 매우 느립니다. (0) | 2023.05.11 |