2014-07-20 8 views
4

내 settings.py 파일에서 STATIC_ROOTMEDIA_ROOT은 모두 현재 하드 코딩 된 위치를 가리 킵니다. 예를 들어, STATIC_ROOT 경로는 다음과 같습니다 사용 된 경로가 하드 코딩되지 않도록 STATIC_ROOT 및 MEDIA_ROOT를 설정하는 방법은 무엇입니까?

/home/ian/projectname/mysite/appname/static 

나는 내 프로젝트를 배포 할 때이 문제가 발생할 것이다라는 것을 알고있다.

주위를 둘러 보니 나는 os.path을 사용해야 할 필요가 있음을 알 수 있지만 수많은 예제가 나를 혼란스럽게 만들었습니다.

나는 스크린 샷이가 파일 값에 대해 불평하기 때문에 내가 뭔가를 놓친 거지 같이 그러나합니다 (BASE_DIR을 설정하는 데 사용되는 예제 값 또는 점점)이 설정 파일의 다른 순열을보기 위해 노력했다.

필요하다면 장고를 사용하고 있습니다. 1.6

미리 감사드립니다. 구성되어 os.path.join() 다른 상대 경로를 사용하여 다음

BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 

:

enter image description here

답변

4

먼저 대화 형 셸에이 줄을 추가하면 NameError: name '__file__' is not defined이 수신됩니다. 셸은이 줄을 추가 한 filepath과 관련하여 __file__의 현재 파일 경로를 검색하지 않습니다.

예를 들어, 작동하려면 os.path.join(os.path.dirname(__file__))file.py에 넣은 다음 명령 줄에서 python file.py을 실행해야합니다. __file__filepathfile.py 인 것과 관련이 있기 때문입니다.

settings.py의 경우 BASE_DIR = os.path.dirname(os.path.dirname(__file__))을 사용하면 장고 프로젝트의 루트 디렉토리를 가져올 수 있습니다. Django directory structure?를 참조하십시오 장고 프로젝트 디렉토리를 배치하는 방법에 대한 자세한 내용은

STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates') 

: 당신은 다음과 같은 다른 상대 경로를, 가입 os.path.join()를 사용할 수 있습니다.

3

일반적인 관행 (또한 django official tutorial에서 제안)는 __file__에서 현재 작업 디렉토리를 가져옵니다 BASE_DIR 설정을하는 것입니다 예 :

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

__file__은 모듈에서만 사용할 수 있으며 콘솔에서 사용하는 것은 의미가 없습니다.

+0

BASE_DIR 예제를 사용하여 매우 즉각적인 응답을 주셔서 감사합니다. 그 값을 "/ home/ian/projectname/mysite /"로 볼 수 있습니까? 그렇다면 os.path.join을 사용하여 다른 두 개의 폴더를 아래로 이동하는 방법은 무엇입니까? 즉/appname/static? –

+0

@IanCarpenter 일반적으로 정적 루트는 앱 수준이 아니라 프로젝트 수준에 있습니다. 'staticfiles' 빌트인 앱을 사용하는 정적 파일을 여러개 가지고 있다면, [정적 파일 관리하기] (https://docs.djangoproject.com/en/dev/howto/static-files/)를 참조하십시오. . – alecxe