2012-06-27 3 views
9

새로운 Django 1.3 정적 파일 프레임 워크에 대한 일반적인 질문이 있습니다.URL 루트에있는 django staticfiles

나는 Django 1.3에서 소개 된 새로운 Django 정적 파일 기능을 정말 좋아합니다. 일반적으로 STATIC_URL = "/ static /"을 설정하고 템플릿에 {{STATIC_URL}} 템플릿 태그를 입력합니다. 개발 서버가 정적 파일을 자동으로 제공하고 모든 콘텐츠가 예상대로 제공되는 것이 좋습니다.

그러나 정적 미디어가 URL 루트에 마운트 된 기존 사이트에서 작업하고 있습니다. 예를 들어 정적 URL 경로는 다음과 유사 할 수 있습니다.

example.com/css/master.css 
example.com/images/logo.png 
example.com/js/site.js 

"정적"URL 네임 스페이스를 사용하지 않습니다.

새 정적 파일 기능을 정적 네임 스페이스를 사용하지 않고 위의 URL을 제공하는 방법이 있는지 궁금하지만, 새로운 정적 파일 프레임 워크 (개발 서버에서 제공하는 정적 파일, 기타). 나는 STATIC_URL = ""및 STATIC_URL = "/"을 설정하려고 시도했지만 어느 것도 원하는 효과를 얻지 못했습니다.

네임 스페이스없이 정적 파일을 제공하도록 정적 파일을 구성하는 방법이 있습니까? 이해해 주셔서 감사합니다. 이것은 DEBUG dev에 서버의 미디어를 매핑합니다

from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = patterns('', 
    # ... the rest of your URLconf goes here ... 
) 

if settings.DEBUG: 
    urlpatterns += static('/css/', document_root='app_root/path/to/css/') 
    urlpatterns += static('/images/', document_root='app_root/path/to/images/') 
    urlpatterns += static('/js/', document_root='app_root/path/to/js/') 

urls.py :

답변

4

수동으로 프로젝트 내에서 static 디렉토리 내에 존재하지 않는 여분의 위치를 ​​추가 할 수 있습니다. 그리고 프로덕션 모드 서버를 실행할 때 django로 요청을 보내지 않고 웹 서버에서 이러한 정적 위치를 처리하게됩니다.

+0

감사합니다. jdi. 템플릿에서 나는 여전히 {{고정}} 또는/css /,/images /,/js/....로 남겨 두었습니까? –

+0

'python manage.py collectstatic'을 통해 수집 할 수 없으므로 더 이상 정적 응용 프로그램에 포함되지 않습니다. '/ css/foo.css'와 같은 일반 URL을 사용하면됩니다. 이들은 개별 위치에서 명시 적으로 제공됩니다. 그들은 심지어 장고 프로젝트 공간 밖에 존재할 수도 있습니다. – jdi

+0

document_root가 '/'로 시작하지 않아야합니다. 예를 들어'urlpatterns + = static ('/ css /', document_root = 'app_root/path/to/css /')와 같이 django 프로젝트의 루트 디렉토리를 지정해야합니다.)' –

2

왜 정적 파일 기능을 유지하지 않고 단순히 웹 서버 수준에서 다시 쓰기를 사용하여 콘텐츠를 제공하십시오. 예를 들어

:

rewrite /css /static permanent; (for nginx) 

이 많은 청소기 프로젝트 디렉토리를 유지하고 또한 인스턴스가 CDN로 STATIC_URL로 이동하기 쉽게, 미래의 주위에 당신의 정적 디렉토리를 이동할 수 있도록한다.

1

이것은 당신이 index.html을하고 장고 1.10에 다른 정적 파일/모두를 제공하기 위해 urls.py을 설정하는 방법입니다 (아직 다른 장고 뷰를 제공 할 수있는 동안) :

from django.contrib.staticfiles.views import serve 
from django.views.generic import RedirectView 

urlpatterns = [ 

    #/routes to index.html 
    url(r'^$', serve, 
     kwargs={'path': 'index.html'}), 

    # static files (*.css, *.js, *.jpg etc.) served on/
    url(r'^(?!/static/.*)(?P<path>.*\..*)$', 
     RedirectView.as_view(url='/static/%(path)s')), 
] 

this answer을 참조하십시오. 여기서 내가 그러한 구성에 대한보다 완전한 설명을 작성했습니다. 특히 제작 용으로 사용하려는 경우 더욱 그렇습니다.