9

新しい Django 1.3 静的ファイル フレームワークについて一般的な質問があります。

Django 1.3 で導入された新しい Django staticfile 機能がとても気に入っています。通常、STATIC_URL="/static/" を設定し、{{ STATIC_URL }} テンプレート タグをテンプレートに入力します。開発サーバーが静的ファイルを自動的に提供し、すべてのコンテンツが期待どおりに提供されるのは素晴らしいことです。

The {{ STATIC_URL }} would be substituted in the template and might serve up files like this...
example.com/static/css/master.css
example.com/static/images/logo.png
example.com/static/js/site.js

ただし、静的メディアが URL ルートにマウントされている従来のサイトで作業しています。たとえば、静的 URL へのパスは次のようになります。

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

「静的な」url 名前空間は使用しません。

新しい staticfile 機能を取得して、静的名前空間を使用せずに上記の URL を提供する方法があるかどうか疑問に思っていましたが、新しい staticfile フレームワーク (collectstatic、開発サーバーによって提供される静的ファイルなど) の利点を保持しています。STATIC_URL="" と STATIC_URL="/" を設定しようとしましたが、どちらも望ましい効果がないようです。

名前空間なしで静的ファイルを提供するように静的ファイルを構成する方法はありますか? ご検討いただきありがとうございます。

4

3 に答える 3

5

staticプロジェクト内のディレクトリ内に存在しない場所を手動で追加できます。

urls.py

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/')

これにより、DEBUG開発サーバーのメディアがマップされます。また、本番モードサーバーを実行している場合は、リクエストをdjangoに送信するのではなく、明らかにWebサーバーからこれらの静的な場所を処理します。

于 2012-06-27T18:53:17.513 に答える
2

staticfiles 機能を保持し、Web サーバー レベルで単純に書き換えを使用してコンテンツを提供しない理由はありません。

例えば:

rewrite /css /static permanent; (for nginx) 

これにより、プロジェクト ディレクトリがよりクリーンに保たれ、将来的に静的ディレクトリを移動しやすくなります。たとえば、STATIC_URL を CDN に移動する場合などです。

于 2012-06-27T21:33:40.053 に答える
1

これは、Django 1.10 で index.html と他の静的ファイルの両方を提供するようにurls.pyを設定する方法です(ただし、他の Django ビューを提供することはできます):

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')),
]

特に本番環境で使用する場合は、このような構成のより完全な説明を書いたこの回答を参照してください。

于 2016-11-10T10:39:01.750 に答える