정적 파일 및 템플릿

오리지널 블로그 주소:django 진급03 정적 파일과 템플릿
정적 파일 및 템플릿
정적 파일: css, js, 이미지. 만약에 순수한 웹 응용 프로그램으로 볼 때 정적 파일의 응답은 웹 응용 범주에 속하지 않는다. 왜냐하면 정적 파일은 업무 논리와 관련이 없고 업무 코드를 개발할 필요가 없기 때문이다.그러나 거의 100%의 웹 응용 프로그램은 정적 파일에 대한 직접 접근을 지원한다.무엇 때문에?주로 웹 응용 프로그램은 기본적으로 css, js,img 등 정적 자원에 의존해야 한다. 우리는 순수한 웹 응용 프로그램을 고집스럽게 개발할 수 없다. url에서 보기 함수만 지원하고 보기 함수로만 내용을 되돌릴 수 있다(간단하게 말하면 모든 요청 경로는 url route와view 보기에 나타나야 한다).사용자가 정적 자원에 대한 요청 처리 서비스를 독립적으로 열어야 한다.따라서 정적 자원 서비스와 업무 논리를 포함하는 웹 응용을 독립적으로 인식하는 것은 양자는 같지 않지만 매우 관련이 있다.그 자체는 응용 프로그램에 독립된 템플릿입니다. 코드에서response 렌더링에 사용되는view 보기의 구성 부분으로 볼 수 있습니다.그래서 독립된 URL 설정이 없고view 보기에 의존하여 존재하며 응용의 일부분에 속하며 업무 논리(렌더링 필요)를 포함하고 있다는 점도 설정에서 알 수 있다.
django 정적 파일 설정
STATIC_ROOT의 모든 정적 조용한 집합 디렉터리, STATICROOT는 절대 주소로 써야 합니다. 예를 들어 제 프로젝트 mysite는/home/mysite입니다. 그러면 STATICROOT는/home/mysite/collect 입니다.static/
 
1
python manage.py collectstatic #     static      STATIC_ROOT    

표시됨, STATICROOT는 배포할 때만 작동합니다.간단하게 말하면 개발할 때 응용에 따라 분산 개발할 수 있기 때문에 css, js 등은 모두 응용에 따라 각자의 응용 디렉터리에 분산될 수 있지만 배치할 때 기존의 웹 서버에 여러 개의 분산된 응용 디렉터리를 설정할 수 없다(또는 높은 결합 문제를 가져올 수도 있다).그래서 디렉터리에 통합하고 nginx의 서버가 이 디렉터리를 가리키면 됩니다.
STATICFILES_DIRS 개발 시 정적 리소스 경로, 배포 시 STATIC 사용ROOT는 정적 리소스 경로로 사용됩니다.그러나 개발할 때 독립된 정적 자원 서버가 없기 때문에 분산적인 설정을 허용하는 동시에 이것도 STATIC 생성ROOT에 있는 파일의 원본 경로STATICFILES_DIRS에는 두 가지 폴더가 있는데 app 응용 프로그램이 독립적으로 차지한다. 하나는 모든 app에 static 폴더를 새로 만들고 정적 파일을 안에 넣는 것이다. 정적 파일을 불러올 때 예를 들어 템플릿에 정적 파일을 사용해야 한다.django는 자동으로 모든 app에서 static 폴더를 검색합니다. (그러므로 폴더의 이름을 잘못 쓰지 마십시오. 그렇지 않으면 django는 당신의 폴더를 찾을 수 없습니다.) 프로젝트 (여러 개 또는 모든 응용 프로그램) 공유: 모든 app 파일 밖에 공공 폴더를 만들지 마십시오. 왜냐하면 일부 정적 파일은 어떤 app만 가지고 있는 것이 아니기 때문입니다.그러면 공공 폴더에 넣을 수 있고,편리한 관리(주의, 공공 정적 파일을 만드는 폴더는 관리하기 쉬운 방법일 뿐이지만 필수적인 것이 아니다. 앱은 앱 전체에 정적 파일을 적용할 수 있다. 마지막으로 모든 정적 파일이 STATIC ROOT에 존재하기 때문이다) 현재의 질문은 어떻게 django가 정적 파일을 앱 이외의 공공 폴더에 넣는지 알게 하는가.STATICFILESDIRS가 나왔어요.
 
1
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'common_static'), )

STATICFILES_DIRS는django에게 먼저 STATICFILESDIRS에서 정적 파일을 찾고, 그 다음에 각 app의static 폴더에서 찾습니다(주의,django에서 정적 파일을 찾는 것은 타성 찾기입니다. 첫 번째를 찾으면 찾기를 중지합니다)
STATIC_URL은 여기까지만 하면 정적 파일의 메커니즘이 작동할 수 있습니다. 그런데 문제가 하나 있습니다. 저는 URL을 통해 프로젝트에 있는 정적 파일을 직접 방문할 수 있습니까? 답은 틀림없습니다. 하지만 브라우저는 방문입니다. 정적 파일의 로컬 절대 주소를 입력할 수 없습니다. 예를 들어 제 그림의 로컬 주소는/home/mysite/common 입니다.static/myapp/photo.png 그러면 다른 사람이 브라우저에 직접 입력할 수 없습니다:http://192.168.1.2:8000/home/mysite/common_static/myapp/photo.png이렇게 하면 브라우저가 오류를 보고할 수 있습니다. 이 페이지가 없으면 django는 어떻게 브라우저도 서버의 정적 파일에 접근할 수 있습니까? 앞에서 말했듯이 서버의 로컬 주소에 직접 접근해서는 안 됩니다. 그러면 맵이 필요합니다. django는 STATIC 를 이용합니다.URL을 사용하면 브라우저가 정적 파일에 직접 액세스할 수 있습니다. 예를 들어,
 
1
STATIC_URL = '/static/'

그러면 브라우저에 다음을 입력할 수 있습니다.http://192.168.1.2:8000/static/common_static/myapp/photo.png그러면 방문/home/mysite/commonstatic/myap/photo.png
개발 환경에서 정적 파일은 Django가 자체로 가지고 있는 웹 서버를 통해 처리됩니다.만약에 DEBUG를False로 설정하면 Django가 자체로 가지고 있는 웹 서버는 정적 파일을 처리하지 않을 것이다. 정적 파일은nginx,apache에 맡기고 처리하자(이렇게 하면 더욱 효율적일 것이다).또한 Django는 지정된 정적 파일이 있는 디렉토리를 찾기 위해findstatic 명령을 제공합니다. 예를 들어 다음과 같습니다.
 
1
D:\TestDjango>python manage.py findstatic Chrome.jpg ('D:/TestDjango/TestDjango/templates',)

django 구성 템플릿
템플릿 관련 구성
 
1
2
3
4
5
6
7
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], #        
        'APP_DIRS': True,#   app   templates   
    }
]

템플릿 관련 구성은 2개에 불과하지만 실제 두 항목은 정적 파일과 비교할 때 1개만 해당되는 STATICFILESDIRS 그래서: TEMPLATES(원시)는 URL에서respones를 직접 지원하는 것이 아니라 URL을 거쳐야 합니다route,view 처리,viewresponse(html)이기 때문에 템플릿은 독립된 루트 설정이 필요하지 않습니다. 그 루트는 구체적으로view 결정을 호출하고 STATIC 가 없습니다.URL과 유사한 구성입니다.물론 정적 리소스의 통합 보존이 필요하지 않으며 STATIC도 필요하지 않습니다.ROOT와 유사한 구성
Django 템플릿 찾기 메커니즘 Django가 템플릿을 찾는 과정은 모든 app의templates 폴더에서 찾을 수 있습니다. (현재 app의 코드가 아니라 현재 app의templates 폴더에서만 찾을 수 있습니다.)각 앱의templates는 하나의 폴더 목록을 형성한다. Django는 이 목록을 훑어보고 하나하나 폴더를 찾는다. 어떤 폴더를 찾을 때 멈추고 모든 것이 다 훑어보고 지정된 템플릿을 찾지 못할 때 Template Not Found이다.이렇게 디자인하는 것은 이롭기도 하고 해롭기도 하다. 유리한 점은 한 앱이 다른 앱의 템플릿 파일을 사용할 수 있다는 것이다. 해로운 점은 잘못 찾을 수 있다는 것이다.그래서 우리가 사용할 때templates에 앱과 같은 이름의 폴더를 만들면 된다.이것은 모든 app의templates 폴더에 app의 이름을 다시 만들어야 합니다. 이 app와 관련된 템플릿만 app/templates/app/디렉터리 아래에 두어야 합니다.
뷰 없이 바로 건너뛰기
 
1
urlpatterns = [ path('about/', TemplateView.as_view(template_name="about.html")), ]

참고 자료
Django 템플릿:https://code.ziqiangxuetang.com/django/django-template.htmldjango - view를 사용하지 않고 Url에서 html로 바로 이동합니다.https://blog.csdn.net/weixin_30325487/article/details/97544472Django 액세스 정적 파일 요약 정보:https://blog.csdn.net/WaitForFree/article/details/39815507django 정적 파일의 구성 설명(Django의 STATIC URL, STATIC ROOT, STATICFILES DIRS 차이점):https://blog.csdn.net/alxandral_brother/article/details/52202270

좋은 웹페이지 즐겨찾기