web-dev-qa-db-ja.com

Djangoメディアファイルがデバッグで表示されない=本番環境でFalse-Django 1.10

現在、静的ファイルとメディアファイルの2種類のファイルがあります。静的ファイルには、css、jsおよびその他の静的コンテンツが含まれています。メディアファイルには、ユーザーがアップロードしたものが含まれています。静的フォルダーは、メディアフォルダーのすぐ隣にあります。これで、展開されたマシン上にあります。 DEBUG = Falseを設定すると、静的ファイルは問題なく表示されますが、メディアコンテンツは表示されません。 404 not foundエラーが発生します。私の質問は、DEBUG = Falseの場合、本番環境でメディアコンテンツをどのように表示するかです。 DEBUG = Trueの場合、すべてが正常に機能しているように見えますか?私は次のことを読みました ページ そしてこれらのことを試しました。

1-静的コンテンツと同じように静的メディア用に別のフォルダーを作成しようとしました。現在、静的コンテンツはcollectstaticコマンドで管理されています。 webfactionでApacheを使用しています。static_contentを実行したときに./manage.py collectstaticという静的フォルダーがあります。静的フォルダー内のすべてのコンテンツがstatic_contentフォルダーにコピーされました。別の静的フォルダーを作成してみました。 static_mediaと呼ばれます。ただし、./manage.py collectstaticを実行すると、mediaフォルダの内容がstatic_contentにコピーされ、本来のようにstatic_mediaにコピーされませんでした。 collectstaticコマンドがコンテンツをstatic_mediaに貼り付けなかった理由を誰かに教えてもらえますか?

これは私の構成がどのように見えるかです

ALLOWED_HOSTS = [
   "*",
   'mywebsite.com',
   'www.mywebsite.com.com',
]


STATIC_URL = 'http://mywebsite.com.com/static/'
STATIC_ROOT = '/home/admin/webapps/static_content'
STATICFILES_DIRS = (
                        '/home/admin/webapps/mainfolder/mainapp/static',
                        '/home/admin/webapps/mainfolder/mainapp/media',
                   )
PROJECT_PATH = os.path.join(BASE_DIR, 'static')

MEDIA_URL = 'http://mywebsite.com.com/media/'
MEDIA_ROOT = '/home/admin/webapps/static_media' 

これは私のurls.pyがどのように見えるかです

admin.autodiscover()
urlpatterns = [
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

DEBUG = Falseの場合の静的コンテンツと同じように、メディアコンテンツを管理するための別のフォルダーを作成する正しいアプローチを使用していますか?もしそうなら、なぜcollectstaticコマンドがすべてのメディアコンテンツをstatic_contentフォルダーではなくstatic_mediaフォルダーにダンプするのですか?また、ユーザーがデータをアップロードするときにメディアコンテンツを管理するために静的フォルダーを使用すると、データはmediaまたはstatic_mediaにアップロードされます。

6
MistyD

メディアディレクトリにcollectstaticを使用しないでください。 _'/home/admin/webapps/mainfolder/mainapp/media'_から_STATICFILES_DIRS_を削除してから、

_MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'
_

これを実行すると、static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)は_DEBUG = True_のときにメディアファイルを提供するはずです。

_DEBUG = False_の場合、メディアファイルを提供するには Apacheを設定 する必要があります。

7
Alasdair

あなたのurls.pyファイル:

この行を追加します

from Django.views.static import serve

これらの2つのURLをurlpatternsに追加します。

url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),

それは私のために働いた:)

10
stathoula

Nginxを使用している場合は、メディアファイルを提供できるようにします

例えば

場所/ media_root / home/myproject dir/myproject; }

1
er23