2012-06-27 12 views
9

新しいDjango 1.3静的ファイルフレームワークに関する一般的な質問があります。django staticfiles at url root

Django 1.3で導入された新しいDjango staticfile機能が本当に好きです。通常、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に要求を送信する代わりに、Webサーバーからこれらの静的な場所を処理することは明らかです。

+0

ありがとうございます。テンプレートでは、私はまだ{{STATIC_ROOT}}か/ 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

staticfiles機能をそのまま使用し、Webサーバーレベルで書き換えを使用してコンテンツを提供するのはなぜですか。例えば

rewrite /css /static permanent; (for nginx) 

このロットクリーナープロジェクトディレクトリを維持しても、インスタンスをCDNにごSTATIC_URLに移動することがより簡単に、将来的に周りのあなたの静的なディレクトリを移動することになるだろう。

1

これは、あなたが(まだ他のDjangoのビューを提供することができるというながら)ジャンゴ1.10で/にindex.htmlをし、あなたの他の静的ファイルの両方を提供するために、あなたの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を参照してください。私はそのような構成のより完全な説明を書いています。