Django 개발 시 정적 파일 구성 매개변수 및 collectstatic

4045 단어
1 개요
통상적으로 생산 상황에서 Django의 프로젝트 파일과 사이트의 정적 파일은 분리하여 저장할 수 있고 심지어 서로 다른 서버에 저장할 수 있다. 예를 들어 Django의 프로젝트 파일은 아리운 서버에 놓고 정적 파일은 칠우운에 저장할 수 있다.
모든 Django 프로젝트의 settings.py 파일의 맨 아래 주석에는 정적 파일 처리에 관한 공식 문서 주소가 있습니다.문서에서는 Django가 정적 파일을 처리하는 방법에 대해 자세히 설명합니다.
Django 1.9.5 버전의 settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/

Django 1.11 버전의 settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

2 주요 프로세스
static 파일과 미디어 파일의 본질은 같고 이전의 Django 버전은 이 두 가지 유형을 합쳐서 처리했다.미디어는 주로 사용자를 대상으로 업로드한 파일이다.static는 프로젝트 개발 시 개발자가 제공한 것이다.
  • MEDIA 설정URL/STATIC_URL, STATIC_ROOT/MEDIA_ROOT 및 STATICFILESDIRS .
  • 사용python manage.py collectstatic
  • 미디어: 사용자가 업로드할 때 지정한 미디어로 전송됩니다.cdn 파일 디렉터리에 있습니다.모델의 ImageField 설정upload_to 속성은 지정된 디렉토리에 업로드할 수 있습니다.
  • static: 개발할 때 정적 파일을 STATICFILESDIRS에 설정된 static 디렉터리, 실행python manage.py collectstatic하면 static 디렉터리의 파일을 STATICROOT에 설정된 파일(static cdn)
  • 사용자가 액세스할 때 라우팅을 통해 해당 정적 파일을 가리킵니다.

  • 3 적절한 설정
    3.1 project/settings.py
    전체 코드는 다음과 같다.
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")
    
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media_cdn")
    
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),
    ]
    

    STATICFILES_DIRS
    개발할 때 사용하는static 파일을 저장할 디렉터리를 설정합니다.
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),
    ]
    

    URL 변수
    STATIC_URL = '/static/'
    MEDIA_URL = '/media/'
    

    URL: STATIC_URLMEDIA_URL는 해당 URL을 찾는 요청을 안내합니다.구체적인 URL 루트는 뒤에서 설정합니다.
    ROOT 변수
    주의BASE_DIRmanage.py가 있는 목록을 가리킨다.
    import os
    
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    

    따라서 BASE_DIR 이 디렉터리에 폴더를 설정하면 예를 들어 설정templates을 사용할 수 있다os.path.join(BASE_DIR, 'templates').
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates'),],
            # ...
        },
    ]
    

    하지만 관리자에 설정하려면py가 있는 디렉터리 외에 다른 평행 동급 디렉터리가 있습니다.
    우선 BASE_DIR 이 디렉터리의 상급 디렉터리를 얻습니다.
    os.path.dirname(BASE_DIR)
    
    os.path.join() 연결을 사용하여 BASE_DIR와 평행하는 디렉터리를 얻습니다
    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media_cdn")
    

    얻은 디렉터리 구조는
    .
    |-- media_cdn
    |   |-- car.jpg
    |   |-- landview.jpg
    |   `-- beach.jpg
    |-- README.md
    |-- requirements.txt
    |-- project
    |   |-- db.sqlite3
    |   |-- __init__.py
    |   |-- manage.py
    |   |-- posts
    |   |-- static
    |   |-- templates
    |   `-- project
    `-- static_cdn
        |-- admin
        |-- css
        `-- vendor
    

    3.2 project/urls.py
    urls에 있습니다.py의 파일에 다음과 같은 내용을 추가하면 static과 미디어의 ROOT 디렉터리에 루트를 설정할 수 있습니다.
    from django.conf import settings
    from django.conf.urls.static import static
    
    if settings.DEBUG:
        urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    판단if settings.DEBUG:을 내린 것은 출시 이후 이런 ROOT 목록을 사용하지 않기 때문이다.DEBUG의 상태는settings이다.py에서 제어
    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = True
    

    3.3 사용collectstatic위의 매개변수를 설정한 후 다음 명령을 실행할 수 있습니다.
    $ python manage.py collectstatic
    

    좋은 웹페이지 즐겨찾기