10

Django本番アプリで静的ファイルを提供するための簡単なステップバイステップのチュートリアルを持っている人はいますか?Djangoのドキュメントを読んだのですが、とても複雑に聞こえます... lighttpd、nginx、cherokeeなどの別のサーバーを使用して静的ファイルを提供しようとしていますが、これらの設定はすべてギリシャ語です。lighttpdをダウンロードし、インストールの指示に従おうとしましたが、数秒以内にエラーが発生しました。これまたはあれか何かが欠けている...私はUNIXの専門家ではなく、C / C ++があまり得意ではないので、この./configureとMAKEのインストールはすべて私には厄介です...だから私は私の当面の質問を推測しますそれは:

  1. インストールと保守が簡単な静的ファイルを提供するために、どのサーバーをお勧めしますか?
  2. 私が実際にサーバーを稼働させていると仮定すると、それではどうしますか?他のサーバー上のファイルを探すようにDjangoに指示するにはどうすればよいですか?
  3. 繰り返しますが、誰かがステップバイステップのチュートリアルを持っていますか?

どうもありがとう!

4

4 に答える 4

5

申し訳ありませんが、ステップバイステップのチュートリアルはありません。しかし、ここに役立つかもしれない高レベルの概要があります:

  1. おそらくApacheサーバー(http://httpd.apache.org/)を使用することをお勧めします。これには、ほとんどの*nixディストリビューションが付属しています。
  2. 次に、mod python(またはコメント投稿者がmod_wsgiを指摘したように:http: //docs.djangoproject.com/en/dev/howto/deployment/modwsgi/)を使用してDjango:http://docs.djangoprojectに接続します。 com / en / dev / howto / deployment / modpython /?from=olddocs。この手順を完了すると、ApacheはDjangoの前に立ちます。
  3. 次に、Django内の静的ファイルを1つのディレクトリに収集し、そのディレクトリをapacheにポイントします。django.contrib.staticfiles(http://docs.djangoproject.com/en/dev/howto/static-files/)を使用した場合は、。/manage.pycollectstaticを使用してこれを行うことができます。

したがって、トリックは、静的ファイルの提供を特定のサーバーに委任するようにDjangoに指示していないことです。むしろ、どのURLがDjangoを介して提供され、どのURLが静的ファイルであるかをhttpdに伝えています。

別の言い方をすれば、すべてのリクエストはApacheWebサーバーに送信されます。Webサーバーは、httpd.confで指定したルールに従って、リクエストが静的ファイルに対するものか、djangoによって生成された動的ファイルに対するものかを決定します。静的ファイルの場合は、単にファイルを提供します。リクエストが動的ファイルに対するものである場合、modpythonを介してリクエストをDjangoに渡します。

お役に立てば幸いです。

于 2011-04-22T15:02:25.210 に答える
4

発達

STATICFILES_DIRSすべての静的ファイルが存在するすべての静的ディレクトリが必要です。

STATIC_URL/static/ファイルがローカルマシンにある場合はそうである必要があります。そうでない場合は、ここにベースURLを入力しますhttp://example.com/

INSTALLED_APPSを含める必要がありますdjango.contrib.staticfiles

テンプレートで、staticfilesモジュールをロードします。

{% load staticfiles %}
<img src='{% static "images/test.png" %}' alt='img' />

製造

STATIC_ROOTDjangoがすべての静的ファイルを収集するために使用する追加STATICFILES_DIRS

静的ファイルを収集します。

$ python manage.py collectstatic

urls.pyへのパスを追加します:

from . import settings

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

より詳細な記事を以下に示します。

于 2015-03-16T22:08:53.970 に答える
0

urls.py用に更新

このフォーマットは、 Django3.0.7url(....)では機能しなくなりました。urls.py

次に行う必要があります:

urls.py

from django.conf import settings # to import static in deployment
from django.conf.urls.static import static # to import static in deployment
....
urlpatterns = [
....

] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # to import static in deployment

参照:https ://docs.djangoproject.com/en/3.0/howto/static-files/

于 2020-06-21T08:36:33.600 に答える
0

Django 3.2.6のような最新のDjangoバージョンでは、開発環境と本番環境の両方でメディアと静的ファイルを提供する際に問題が発生していましたDEBUG = False

だから私は複数のスタックオーバーフローポストから来た解決策を回避しました。

  1. 適切な機能をインポートする
from django.urls import include, path, re_path
from django.views.static import serve
  1. 静的URLパターンリストを定義する
static_urlpatterns = [
    re_path(r"^media/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT}),
    re_path(r"^static/(?P<path>.*)$", serve, {"document_root": settings.STATIC_ROOT}),
]

STATIC_ROOTとがすでにファイルMEDIA_ROOTで定義されていると仮定しますsettings.py

  1. 含めるstatic_urlpatternsだけurlpatterns
urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/", include(api_urlpatterns)),
    path("", include(static_urlpatterns)),
]

.dev環境とprod環境の両方で機能することを願っていますDEBUG = FALSE。ありがとうございました。

于 2021-12-09T17:01:52.190 に答える