Djangoはメディアファイルをどのように提供しますか?
質問
画像を使用する Django アプリケーションをセットアップしました。メディア設定MEDIA_ROOTおよびMEDIA_URLを正しくセットアップしたと思います。ただし、画像は表示されません。何が問題になるか知っていますか?
この例を考えてみましょう:
画像ファイルは / home / www / media / app / photos の下にあり、 http://example.com/photos/123.jpg
これらの設定を使用する必要がありますか
MEDIA\_ROOT = /home/www/media
MEDIA_URL = http://example.com/app
更新:組み込みの開発サーバーを使用していることを忘れていました。
解決
Djangoから静的コンテンツを提供することは、開発者自身から排除されます(私が間違っていなければ、デバッグモードでのみ機能します)。代わりに、専用のWebサーバーを使用する必要があります。
とにかく本当に必要な場合は、 howのドキュメントを読んでください静的ファイルを提供する。
他のヒント
開発専用
urls.py
ファイルでこれを行うことで、開発サーバーで使用する静的メディアサーバーをセットアップできます。使用方法を示すコードを(強制DEBUG条件とともに)添付しました。
from django.conf import settings
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^
MEDIA_ROOT
をhtml / mediaのサブディレクトリに配置し、 settings.py
でそのようにリンクします
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'html/media/').replace('\\','/')
開発が完了すると、プロジェクトはWebサーバーにデプロイされ、そこで静的メディアファイルが Apacheによって提供されます。 ディレクティブを使用します。
, 'views.index'),
# Accounts
(r'^accounts/login/
MEDIA_ROOT
をhtml / mediaのサブディレクトリに配置し、 settings.py
でそのようにリンクします
<*>
開発が完了すると、プロジェクトはWebサーバーにデプロイされ、そこで静的メディアファイルが Apacheによって提供されます。 ディレクティブを使用します。
, 'views.user_login'),
(r'^accounts/logout/
MEDIA_ROOT
をhtml / mediaのサブディレクトリに配置し、 settings.py
でそのようにリンクします
<*>
開発が完了すると、プロジェクトはWebサーバーにデプロイされ、そこで静的メディアファイルが Apacheによって提供されます。 ディレクティブを使用します。
, 'views.user_logout'),
# Contrib Modules
(r'^admin/(.*)', admin.site.root),
)
if settings.DEBUG :
urlpatterns += patterns('',
(r'^media/(?P<path>.*)
MEDIA_ROOT
をhtml / mediaのサブディレクトリに配置し、 settings.py
でそのようにリンクします
<*>
開発が完了すると、プロジェクトはWebサーバーにデプロイされ、そこで静的メディアファイルが Apacheによって提供されます。 ディレクティブを使用します。
, 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
)
MEDIA_ROOT
をhtml / mediaのサブディレクトリに配置し、 settings.py
開発が完了すると、プロジェクトはWebサーバーにデプロイされ、そこで静的メディアファイルが Apacheによって提供されます。 ディレクティブを使用します。
これは、ImageFieldで画像ファイルを表示する正しい方法です。ユーザープロフィール画像があるとします:
models.py:
UserProfile:
profilePic= models.ImageField( upload_to='PATH_TO_UPLOAD', blank=True, null=True)
settings.py:
MEDIA_ROOT = 'FULL_PATH_OF_MEDIA'
MEDIA_URL = 'URL_OF_MEDIA'
urls.py:
urlpatterns = [
.
.
.
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
PATH_TO_UPLOADは、ユーザーアップロードデータが移動するパスです。これはFULL_PATH_OF_MEDIAのサブディレクトリです。つまり、アップロードされたファイルには
が含まれます。FULL_PATH_OF_MEDIA/PATH_TO_UPLOAD
フルパス。このコンテンツには次のURLからアクセスできます。
SITE_NAME/URL_OF_MEDIA/PATH_TO_UPLOAD
Django 404ページを取得していると思われます。画像の1つに直接アクセスして、それが起こっているかどうかを確認してください。
その場合、Webサーバーを設定して、メディア階層内のリクエストをDjangoに送信しない 代わりに、直接リクエストを処理する必要があります。これは、Apache confファイルからの抜粋です。最初のセクションは、すべてをDjangoに送信するようApacheに指示します。 2番目のセクションには、「SetHandler None」があります。これは、「/ mediaの下にあるものを通常の方法で処理する」と書かれています。
http://docs.djangoproject.com/en/devを参照してください。 / howto / deployment / modpython / にすべてのエキサイティングな詳細が記載されています。
PrinceOfPinot.comの部分的なhttpd.confファイル(ポップ):
<Location "/">
SetHandler python-program
PythonAutoReload Off
PythonDebug Off
PythonPath "['/var/www/production/pop', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE settings
PythonHandler django.core.handlers.modpython
</Location>
<Location "/media">
SetHandler None
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
</Location>
元の質問は開発サーバーに関するものであることは承知していますが、本番環境を探している他の人には答えてください:
https://docs.djangoproject.com/en/1.8 / howto / static-files / deployment / は、実稼働環境でdjangoがファイルを提供する方法に関するガイドを提供します。ガイドの調子から、ファイルを処理するために別個のWebサーバーを用意するか、Apacheでmod_wsgiを使用することが最善であることを暗示しているように見えます