2011-10-01 7 views
5

나는 문서를 모두 읽었으며, 나에게 이해가 가지 않는다. 나는 collectstatic를 실행했다. 나는 내 app 디렉토리와 my project 디렉토리 모두에서/static/directories를 설정하고, settings.py 파일에 STATIC_URL과 STATIC_ROOT를 추가했다. (올바르게 설정되었는지 어떻게 알 수 있을지 모르지만) {{ STATIC_URL}}은 아직 렌더링되지 않습니다. 그것은 모두 CSS로 html을 연결하기 위해 많은 잔인한 일을하는 것처럼 보인다.개발중인 CSS를 장고에 어떻게 제공합니까?

나는 세부 사항에서 분실하다 생각한다; 누구든지이 정적 파일 아이디어에 대한 고차원 분석을 제공 할 수 있습니까? 생산 및 개발 설정을위한 지침이 혼합되어있을 수 있습니다.

: 여기 내 settings.py 파일에서 해당 비트의 :

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    # Uncomment the next line to enable the admin: 
    'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    # 'django.contrib.admindocs', 
    'django.contrib.staticfiles', 
    'dashboard.base', 
) 

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.contrib.auth.context_processors.auth', 
    'django.contrib.messages.context_processors.messages', 
) 

STATIC_ROOT = '' 
STATIC_URL = '/static/' 


STATICFILES_DIRS = (
    'C:/Users/Sean/Desktop/Work Items/dashboard/base/static/', 
) 

그리고 이것은 내 템플릿에 사용하기 위해 노력하고있어 코드 :

<link rel="stylesheet" href="{{ STATIC_URL }}css/960.css" /> 

확인을 클릭합니다. 나는 모두가 추천 한 변화를 만들었다. 여기 내 새로운 urls.py :

from django.conf.urls.defaults import * 
from base.views import show_project 
from django.conf import settings 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
# Example: 
# (r'^dashboard/', include('dashboard.foo.urls')), 

# Uncomment the admin/doc line below to enable admin documentation: 
# (r'^admin/doc/', include('django.contrib.admindocs.urls')), 

# Uncomment the next line to enable the admin: 
(r'^admin/', include(admin.site.urls)), 
('^show_project/$', show_project), 
) 

if settings.DEBUG: 
    urlpatterns += patterns('', 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True }), 
     url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True })) 

urlpatterns += staticfiles_urlpatterns() 

내가 뭔가를 잃어버렸나요? 일반적으로 내 문제는 CS 프로가 당연한 것으로 받아 들일 수있는 기본적인 것이지만 나는 그리워합니다.

답변

4

다음은 어떻게 작성합니까? 정적 컨텍스트 프로세서가 누락 된 것 같습니다.

STATIC_ROOT하고 설정에서 STATIC_URL

.개발에 사용 평 :

STATIC_ROOT = '' 
STATIC_URL = '/static/' 

그리고 내 프로덕션 서버에 사용되는 settings.py은 :

그래서
STATIC_URL = '//static.MYDOMAIN.com/' 
STATIC_ROOT = '/home/USER/public_html/static.MYDOMAIN.com/' 

, 모든 정적 파일은 static/에 있습니다. 프로덕션 서버에서 static/의 모든 파일은 /home/USER/public_html/static.MYDOMAIN.com/으로 수집됩니다. 여기서는 장고가 아닌 다른 웹 서버 (제 경우에는 nginx)에서 서비스합니다. 다시 말해서, Apache에서 실행되는 내 장고 응용 프로그램은 프로덕션에서 정적 자산에 대한 요청을받지 못합니다.

CONTEXT 프로세서 STATIC_URL 그들에게 가능한 변수, 당신은 django.core.context_processors.static 상황에 맞는 프로세서, 또한 settings.py에 정의 사용할 필요가 가지고있는 템플릿을 위해서는

:

TEMPLATE_CONTEXT_PROCESSORS = (
    # other context processors.... 
    'django.core.context_processors.static', 
    # other context processors.... 
) 

서버에 정적 자산을 IN DEVELOPMENT

장고는 p의 정적 자산에 대한 요청을받지 않습니다. 그러나, 개발 과정에서 Django가 정적 컨텐츠를 제공하도록했습니다. Django에게 static/*에 대한 요청을 처리하라고 알리는 데 에 staticfiles_urlpatterns을 사용합니다.

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
# .... your url patterns are here ... 
urlpatterns += staticfiles_urlpatterns() 
+0

감사합니다. 프로세서가 있습니다. 위의 파일에서 볼 수 있습니다. 귀하의 설정, 나를 도왔 : 내 STATIC_ROOT 및 STATIC_URL 설정에서 절대 경로를 사용했다. 나는 그것을 고쳤다. 그러나 나는 아직도 STATICFILES_DIRS에서 절대 경로가 필요하다고 생각한다. – StormShadow

+2

@StormShadow, 정적 파일이'settings.py'와 같은 디렉토리에 있다고 가정하면'os.path.join (os.dirname (__ file __), "static")'을 할 수 있습니다. – Geo

+0

Django 개발 서버 또는 nginx 나 Apache와 같은 다른 서버를 사용하여 파일을 제공하는지는 언급하지 않았다고 생각합니다.두 번째 문제는 프로젝트의 구성 설정이 아닌 프로덕션 서버의 구성과 관련 될 수 있습니다. – kaysa

2

Serving static files in development을 살펴보십시오. 파일을 찾을 위치를 django.contrib.staticfiles에 알리려면 STATIC_URLSTATICFILES_DIRS을 정의해야합니다.

+0

오른쪽. 그게 내가 지금 당장하는 일이야. 하지만 작동하지 않습니다. 슬래시를 사용하고 C : /에서 경로를 시작합니다. 틀렸어? – StormShadow

+0

덧붙여 말하자면 {{STATIC_URL}} 변수를 실제로 설정하는 변수가 무엇인지 모르기 때문에 둘 다 동일한 것으로 설정됩니다. 어느 쪽도 효과가없는 것 같습니다. – StormShadow

+0

그들은 동일해서는 안됩니다. STATICFILES_DIRS는 파일이 현재있는 위치에 있어야하며 STATIC_ROOT은 파일을 수집 할 때 별도의 폴더 여야하며 STATIC_URL은 사이트/앱을 사용할 때 파일에 액세스하기 위해 사용하려는 경로 여야합니다. –

2

정적 파일 아이디어의 아이디어는 개발 관련 미디어 파일 (css/js 등)을 앱별로 배포 할 수 있으며 정적 파일 응용 프로그램이 정적 파일 응용 프로그램에서 해당 리소스를 모두 관리하고 수집 할 수 있다는 것입니다. 다양한 장소.

그래서 정적 파일 앱 (설정 STATICFILES_DIRS 기준), 복사 위치 (STATIC_ROOT) 및 액세스 경로 (STATIC_URL)를 정적 파일 앱에 알립니다. collectstatic을 실행하면 디렉토리를 검색하여 찾은 모든 파일을 정적 루트로 복사합니다.

project/app1/static/css/ # These are css/js for a particular app 
project/app2/static/css/ 
project/app3/static/css/ 
project/static/css # These might be general css/js for the whole project 
static/ # This is where the collectstatic command will copy files to 

당신이 그들을 collectstatic 후해야합니다 :

이것의 장점은 미세한 LEVE에 정적 파일을 관리 할 수 ​​있다는 것입니다

project/app1/static/css/ 
project/app2/static/css/ 
project/app3/static/css/ 
project/static/css 

static/app1/css/ 
static/app2/css/ 
static/app3/css/ 
static/css/ 

앱을 넣어/웹 서버 (apache, nginx)가/static/또는/media /에있는 미디어 파일을 제공하도록 지정하여 파일을 처리하도록하고 다른 모든 요청을 응용 프로그램에 전달하도록합니다. 개발할 때, 개발 서버가 당신을 위해 이것을하도록하는 것이 더 쉽습니다.

이렇게하려면/static/(STATIC_URL) 아래의 미디어 요청을 서버에 명시해야합니다. urls.py에 다음 내용 (또는 이와 유사한 내용)을 넣으십시오.

from django.conf import settings 
... 
if settings.DEBUG: 
    urlpatterns += patterns('', 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True }), 
     url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True })) 
+0

예 그 중 하나가 작동하지 않습니다. 그것은 나에게 "NameError at/show_project/ '설정'이 정의되지 않았습니다" – StormShadow

+0

설정을 가져와야합니다. 내 대답을 편집했습니다 –

+0

고마워요! 그러나 여전히 아무것도 나오지 않습니다. 방금 내가 거기에있는 다른 코드를 붙여 넣었습니다. 그걸 잊어 버린 것일까 요? – StormShadow

0

나는 동일한 문제를 가지고 있으며 많은 답을 검색하지만 아무도 나에게 정답을주지 않습니다. 문제는 RequestContext을 사용하지 않는 것입니다. 내보기에

c = RequestContext(request, { 
    'foo': 'bar', 
}) 

같은 템플릿의 매개 변수로 RequestContext을해야입니다 :

return render_to_response('parts/test2.html', RequestContext(request, locals())) 
관련 문제