2011-10-17 4 views
1

Django 앱을 처음 작성하는 중이므로 조금 뒤떨어져 있다면 나와 함께 감내하십시오.Django 정적 파일에 어떤 문제가 있습니까?

STATIC_ROOT = os.getcwd().replace('\\','/') + '/static' 

STATIC_URL = '/static_files/' 

STATICFILES_DIRS = (
    os.getcwd().replace('\\','/') + '/static' 
) 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

참고 : 여기에

내 settings.py에서 발췌 한 것입니다 나는 os.getcwd()... 라인이 작동 바라고 있어요. 나는 이것이 내 문제가 아니라고 확신하지만, 이것이 문제인지 알려주십시오. 로컬 개발을위한 자리 표시 자이므로 배포 할 때 남아있을 걱정하지 마십시오.

첫 번째 문제는 템플릿 변수가 작동하지 않는 것입니다.

내 주요 템플릿 파일에서 발췌 : 나는 원래 그냥 거기에 {{ STATIC_URL }}을했다

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL|default:'/static_files/' }}css/base.css" /> 

하지만 단순히 반환 아무것도, 그래서 |default:'...'를 추가했습니다. 이것은 결과 HTML에 주어진 문자열을 성공적으로 생성했지만 여전히 작동하지 않아 두 번째 (그리고 더 중요한 것은 솔직히) 문제가되었습니다.

정적 파일을 전혀 사용할 수 없습니다. 나는 여기에 여러 가지 방법을 시도했다. I 위 STATIC_* 변수 각 (다양한 조합)의 절대 경로와 상대 경로를 바꾸어 시도, I는 해당 MEDIA_URL 대신 바르 사용 시도 및 I는 퍼팅에 다음 시도 내 urls.py :

urlpatterns = ('', 

    # ... 

    (r'^static_files/(?P<path>.*)$', 
     'serve', { 
      'document_root': '/path/to/django/dir/static_files/', 
      'show_indexes': True 
     } 
    ), 
) 

(위의 코드를 http://www.arthurkoziel.com/2008/09/02/handling-static-files-django/에서 가져 왔습니다.)

초기 개발자가 완성되면 결국에는 병렬 Apache 프로세스에서 정적 파일을 제공하게 될 것입니다. 그러나 나는 아직도 내가 무엇인지 알고 싶습니다. 잘못하고있다. StackOverflow 온라인 또는 정적 파일에 대한 포괄적 인 자습서를 찾을 수 없었습니다.

모든 도움을 주시면 대단히 감사하겠습니다.

편집 : 중요한 경우, 저는 Windows 7에서 Python 2.7을 사용하고 있습니다.

답변

3

하나의 가능성 - STATIC_URL은 RequestContext를 전달하지 않는 한 템플릿에서 작성되지 않습니다.

당신이 당신의 뷰에서 이런 일이 있는지 확인 : 당신은 또한 새로운 바로 가기를 사용할 수 있습니다

return render_to_response(template, context, context_instance=RequestContext(request)) 

장고 1.3으로 :

또한
return render(request, template, context) 

, 당신이 '장고가 있는지 확인합니다. core.context_processors.static '를 컨텍스트 프로세서에 추가하십시오.


편집 : 두 번째 문제에 대한 가능한 대답은 변경 시도

STATICFILES_DIRS = (
    os.getcwd().replace('\\','/') + '/static' 
) 

STATICFILES_DIRS = (
    os.getcwd().replace('\\','/') + '/static', 
) 

에 편집 2 : 더 가능한 수정

당신은 STATICFILES_FINDERS을 삭제할 수 있습니다 . 기본값으로 만 설정했기 때문에 나중에 확장하지 않으려면이 설정을 제거하십시오 (잘못 될 일이 적음).

또한 urlpatterns 항목을 제거 할 수도 있습니다. 필요 없습니다.

STATIC_ROOT이 (가) 잘못되었습니다. 프로덕션 환경으로 옮길 때 Django가 프로젝트 전체에서 정적 파일 (STATICFILES_DIRS에 설명 된 디렉토리 포함)을 모을 장소 여야합니다. 광산의 전형적인 settings.py에서

예 : 그것은

PROJECT_DIR = os.path.dirname(__file__) 

STATIC_URL = '/static/' 

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

STATIC_ROOT = '/var/www/myproject_staticfiles/' 

입니다!

당신이 장고 발견하고 올바르게 정적 파일을 배치 여부를 테스트하려면, 내 프로젝트 디렉토리를 통해 갈 것이라고 내 경우

python manage.py collectstatic 

을 실행 해, 모든 정적 파일을 찾을 후 복사 '/ var/www/myproject_staticfiles /'를 건너서 아파치로 호스트 할 수 있습니다.

Django dev 서버는 프로젝트 폴더에서 정적 파일을 자동으로 제공하므로 dev에있는 동안에는 collect_static이 필요하지 않습니다. 생산에 들어갈 때까지 STATIC_ROOT를 설정할 필요조차 없습니다.

+0

제 첫 번째 작은 문제가 수정되었습니다. 그러나 제 두 번째 문제는 여전히 있습니다. –

+0

두 번째 문제에 대한 가능한 수정으로 편집했습니다. –

+0

불행히도, 이것은 나를 위해 아무것도하지 못했습니다. 쉼표를 추가해도 아무 것도 변경되지 않습니다. 그것은 여전히 ​​하나의 항목을 가진 튜플로 끝납니다. –