2011-11-02 7 views
3
urlpatterns = patterns('', 
    # Examples: 
    url(r'^$', 'core.views.homepage', name='homepage'), 
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), 
) 

をデバッグをオンにすると動作を停止します。私には本当に奇妙な私の設定Djangoの静的ファイルは、静的ファイルは、私はDEBUGを無効にした場合に動作し、私は背中にそれを有効にした場合は動作しません</p> <p>私urls.pyです

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

# URL prefix for static files. 
# Example: "http://media.lawrence.com/static/" 
STATIC_URL = '/static/' 

# URL prefix for admin static files -- CSS, JavaScript and images. 
# Make sure to use a trailing slash. 
# Examples: "http://foo.com/static/admin/", "/static/admin/". 
ADMIN_MEDIA_PREFIX = '/static/admin/' 

# Additional locations of static files 
STATICFILES_DIRS = (

    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
) 

# List of finder classes that know how to find static files in 
# various locations. 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
# 'django.contrib.staticfiles.finders.DefaultStorageFinder', 
) 

パート、誰でも助けることができますか?

+0

音が奇妙です。特に静的ファイルは、デバッグが有効な状態でのみ動作します。 mod_rewrite、mod_aliasなどをサーバ(debug = false)で使用して、単にデバッグマシン(debug = trueの場合)のバックグラウンドで処理させることをお勧めします。 –

+0

私はそれをうまく処理しましたが、私は別の解決法をここに求めます。 STATIC_ROOTはdjangoによって全く提供されません。あなたはSTATICFILES_DIRSを入れなければなりません。そして、デバッグ・オフ・モードでは、collectstaticを実行して、それらのファイルを別のフォルダーにコピーします。 – user469652

+0

これは厄介なことでした。非デバッグモードでテストしたい場合は、そのコマンドを実行してファイルを更新する必要があります。 – user469652

答えて

21

いいえ、STATIC_ROOTではありません。はDjangoのサービスです。本番環境(デバッグオフ)では、Webサーバーがこのディレクトリを直接提供することが期待されます。開発中(デバッグ時)には、このディレクトリやその中に何かを入れてはいけません。

もう一度強調しておきます。 は、資産を直接STATIC_ROOTに保存することになっています。このディレクトリは、collectstatic管理コマンドの出力専用です。プロジェクト内のすべてのアセットは、それが属する特定のアプリのstaticディレクトリに保存されているはずです。

もちろん、1つのアプリに直接関連しているのではなく、プロジェクト全体全体としてアセットを持つことがよくあります。このシナリオでは、別のディレクトリをプロジェクトに作成し、すべての共通アセットをそこに配置します。次に、このディレクトリをSTATICFILES_DIRS設定に追加します。開発では

は、Djangoのそのディレクトリに何を提供し、生産で、collectstatic管理コマンドはSTATIC_ROOTにそのディレクトリから資産を引っ張ってきます。

+0

本当に私には本当に良い答え、ありがとう! – user469652

+0

これは私が見たこの問題の単一の最善の説明です。多くの人に感謝します。私の+1。 – Brandon

+0

開発中に、そこに物を置かないと、後でstaticrootに入れられるファイルをどのように提供するのですか?人々が静的/ *を訪問したときに、another_dir/*を提供するURLパターンを手動で設定しますか?多くの人がこれに乗り遅れたと思う理由は、djangoがSTATIC_ROOTのファイルを提供しているからです。そのため、ほとんどの人は他のディレクトリからファイルを提供するローカルな方法を設定しません。その後、彼らがApacheを介して提供するように切り替えると、すべてのファイルをそこに残し、決してcollectstaticを実行しません。 – fastmultiplication