2011-10-01 19 views
5

私はドキュメントをすべて読んできましたが、それは私には意味がありません。私はcollectstaticを実行しました。私は自分のappディレクトリとプロジェクトディレクトリの両方に/ static /ディレクトリを設定し、settings.pyファイルにSTATIC_URLとSTATIC_ROOTを追加しました(しかし、正しく設定されているかどうか知る方法はわかりません) STATIC_URL}}はまだ何かにレンダリングしていません。それはちょうどhssをcssに接続するためにたくさんの過剰なものがあるようだ。開発中にCSSをDjangoに提供するにはどうすればよいですか?

私は細部に迷っていると思います。誰でもこの静的ファイルのアイデアを高レベルで分析できますか?私は、生産と開発の両方のセットアップのための命令が混在している可能性があります。

MORE

:ここでは私の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" /> 

OK。誰もが推薦した変更を加えました。ここに私の新しい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

。開発に使用PY:

STATIC_ROOT = '' 
STATIC_URL = '/static/' 

そして、私の本番サーバー上で使用settings.py:

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

だから、すべての静的ファイルがstatic/に位置しています。本番サーバーでは、static/内のすべてのこれらのファイルは、それらが別のWebサーバ(私の場合はnginxの)とないジャンゴによって提供されている/home/USER/public_html/static.MYDOMAIN.com/に収集されます。言い換えれば、私のdjangoアプリケーション(Apache上で動作している)は、運用中の静的資産の要求を受け取ることさえありません。テンプレートはそれらに利用STATIC_URL変数を持つようにするためには

コンテキストプロセッサ

、あなたもsettings.pyで定義され、django.core.context_processors.staticコンテキストプロセッサを使用する必要があります。

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

Serverの静的資産開発中の

ジャンゴは、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(__ファイル__)、 "静的")を行うことができます。 – Geo

+0

Django開発サーバーやnginxやApacheのような別のサーバーを使ってファイルを提供しているのかどうかは言及していないと思います。2番目の問題がプロジェクトの構成設定ではなく、運用サーバーの構成に関連する可能性がある場合。 – kaysa

2

Serving static files in developmentをご覧ください。ファイルを探す場所をdjango.contrib.staticfilesに知らせるには、STATIC_URLSTATICFILES_DIRSを定義する必要があります。

+0

右。それは私が今実際に行っていることです。しかし、それは動作していません。私はスラッシュを使用して、C:/でパスを開始しています。それは間違っていますか? – StormShadow

+0

ちなみに、{{STATIC_URL}}変数が実際にどの変数に設定されているのかわからないので、両方とも同じものに設定されています。どちらも機能していないようです。 – StormShadow

+0

同じであってはいけません。あなたのファイルは、現在、STATIC_ROOTは、あなたのファイルは、彼らが収集されたときに終わるしたい別のフォルダでなければなりませんされている場合STATICFILES_DIRSはあるべき、と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/ 

アプリを入れて/ webサーバ(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

を使用している場合うん、あなたのファイルにアクセスするために使用するパスでなければなりませんそれはどちらもうまくいかない。それは私に "/ show_projectでのNameError/ 名前の設定 'が定義されていない" – StormShadow

+0

の設定をインポートする必要があります。私は私の答えを編集しました –

+0

ありがとう!しかし、まだ何も出てこない。私はちょうど私がそこに持っている他のコードを貼り付けました。多分私はそれで何かを忘れてしまったでしょうか? – StormShadow

0

私は同じ問題を抱えていますが、多くの答えを探しますが、誰も私に正しい答えを教えてくれません。 問題は使用しないでくださいRequestContextと思います。 あなたは私の意見では

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

のようなテンプレートのパラメータとしてRequestContextを作るべきである。

return render_to_response('parts/test2.html', RequestContext(request, locals())) 
関連する問題